我需要什么算法才能找到n-gram?

Ren*_*ani 14 r n-gram

什么算法用于查找ngrams?

假设我的输入数据是一个单词数组和我想要找到的ngram的大小,我应该使用什么算法?

我要求代码,优先选择R.数据存储在数据库中,因此也可以是plgpsql函数.Java是我更熟悉的语言,因此我可以将其"翻译"为另一种语言.

我不是懒惰,我只是要求代码,因为我不想重新发明轮子试图做一个已经完成的算法.

编辑:重要的是知道每个n-gram出现多少次.

编辑2:N-GRAMS有一个R包吗?

Ben*_*Ben 24

如果要用于R识别ngrams,可以使用tm包和RWeka包.它将告诉您文档中出现ngram的次数,如下所示:

  library("RWeka")
  library("tm")

  data("crude")

  BigramTokenizer <- function(x) NGramTokenizer(x, Weka_control(min = 2, max = 2))
  tdm <- TermDocumentMatrix(crude, control = list(tokenize = BigramTokenizer))

  inspect(tdm[340:345,1:10])

A term-document matrix (6 terms, 10 documents)

Non-/sparse entries: 4/56
Sparsity           : 93%
Maximal term length: 13 
Weighting          : term frequency (tf)

               Docs
Terms           127 144 191 194 211 236 237 242 246 248
  and said        0   0   0   0   0   0   0   0   0   0
  and security    0   0   0   0   0   0   0   0   1   0
  and set         0   1   0   0   0   0   0   0   0   0
  and six-month   0   0   0   0   0   0   0   1   0   0
  and some        0   0   0   0   0   0   0   0   0   0
  and stabilise   0   0   0   0   0   0   0   0   0   1
Run Code Online (Sandbox Code Playgroud)

帽子:http://tm.r-forge.r-project.org/faq.html


小智 8

对于仍然对这个主题感兴趣的人,已经有了一个包裹.

ngram:一个n-gram Babbler

该软件包提供了用于创建,显示和"唠叨"n-gram的实用程序.说话者是一个简单的马尔可夫过程.

http://cran.r-project.org/web/packages/ngram/index.html


Ala*_*air 1

编辑:抱歉,这是 PHP。我不太确定你想要什么。我不知道 java 中的它,但也许下面的内容可以很容易地转换。

这取决于你想要的 ngram 的大小。

我在单个字母方面取得了相当大的成功(对于语言检测尤其准确),这很容易实现:

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

然后有以下函数用于根据单词计算 ngram:

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;
}
Run Code Online (Sandbox Code Playgroud)

上述内容的来源在这里,我建议您阅读,它们有很多功能可以完全满足您的需求。