是的,ngrams可以在bash中實現。
# Usage: ngrams N < FILE
ngrams() {
local N=$1
local line
set --
while read line; do
set -- $* $line
while [[ -n ${*:$N} ]]; do
echo ${*:1:$N}
shift
done
done |
sort | uniq -c
}
$ ngrams 2
Here is some text, and here is
some more text, and here is yet
some more text
1 Here is
2 and here
2 here is
2 is some
1 is yet
1 more text
1 more text,
2 some more
1 some text,
2 text, and
1 yet some
注:以上是功能,而不是一個腳本(也許這question幫助,或許還有另外一個,這是更好)。這裏是腳本版本:
#!/bin/bash
# Usage: ngrams N < FILE
N=$1
set --
while read line; do
set -- $* $line
while [[ -n ${*:$N} ]]; do
echo ${*:1:$N}
shift
done
done |
sort | uniq -c
你能詳細說明'ngram'是什麼意思嗎?一個更完整的例子會比僅僅樣本輸出更好。 –
當然。 「ngram」是語料庫中的單詞(文本,通常是純文本文件)的任意組合。一個二元組是兩個單詞(「藍色車」),一個三元組是三個單詞(「藍色車」),等等。 「n」僅僅意味着單詞的數量是任意的,儘管在實踐中,很少見到超過五個單詞。通常,識別ngram的值是在文本中測量它們的頻率。 – user1889034
詳情請參閱http://en.wikipedia.org/wiki/N-gram。一個很好的例子是antconc,目前我正在使用antconc,但我很想簡單地調用一個腳本。這裏是我提到的現有腳本:http://www1.cuni.cz/~obo/textutils/ngrams – user1889034