14

ngram を見つけるために使用されるアルゴリズムは何ですか?

入力データが単語の配列であり、検索したい ngram のサイズであると仮定すると、どのアルゴリズムを使用する必要がありますか?

Rを優先してコードを求めています。データはデータベースに保存されるため、plgpsql関数でもかまいません。Java は私がよく知っている言語なので、別の言語に「翻訳」できます。

私は怠け者ではありません。コードを求めているだけです。なぜなら、既に行われているアルゴリズムを実行しようとして車輪を再発明したくないからです。

編集:各 n-gram が何回出現するかを知ることが重要です。

編集 2: N-GRAMS 用の R パッケージはありますか?

4

7 に答える 7

2

通常、n グラムはその度数分布を見つけるために計算されます。はい、n-gram が何回出現するかは重要です。

また、文字レベルの n-gram または単語レベルの n-gram が必要です。rのcsvファイルから文字レベルのn-gramを見つけるためのコードを書きました。そのためにパッケージ「tau」を使用しました。ここで見つけることができます。

また、ここに私が書いたコードがあります:

 library(tau)
temp<-read.csv("/home/aravi/Documents/sample/csv/ex.csv",header=FALSE,stringsAsFactors=F)
r<-textcnt(temp, method="ngram",n=4L,split = "[[:space:][:punct:]]+", decreasing=TRUE)
a<-data.frame(counts = unclass(r), size = nchar(names(r)))
b<-split(a,a$size)
b

乾杯!

于 2013-07-19T13:55:38.993 に答える
1

編集: 申し訳ありませんが、これは PHP です。あなたが何を望んでいるのかよくわかりませんでした。Javaではわかりませんが、おそらく次のコードは簡単に変換できます。

まあ、それはあなたが望むngramのサイズに依存します。

私は、簡単に取得できる単一文字 (特に言語検出で正確) でかなり多くの成功を収めました。

$letters=str_split(preg_replace('/[^a-z]/', '', strtolower($text)));
$letters=array_count_values($letters);

次に、単語から ngrams を計算する次の関数があります。

function getNgrams($word, $n = 3) {
        $ngrams = array();
        $len = strlen($word);
        for($i = 0; $i < $len; $i++) {
                if($i > ($n - 2)) {
                        $ng = '';
                        for($j = $n-1; $j >= 0; $j--) {
                                $ng .= $word[$i-$j];
                        }
                        $ngrams[] = $ng;
                }
        }
        return $ngrams;
}

上記のソースはこちらです。これを読むことをお勧めします。これらには、必要なことを正確に実行するための多くの機能があります。

于 2011-11-17T01:57:45.460 に答える
0

https://cran.r-project.org/web/packages/ngram/vignettes/ngram-guide.pdfをご覧ください。

これが簡単な例です。ビネットのベンチマークを見るとかなり速いです。

require(ngram)

"hi i am ig" %>% ngram(n = 2) %>% get.ngrams()
于 2017-02-26T15:48:34.873 に答える