Ngram的计算是什么?

时间:2013-05-26 14:49:34

标签: python n-gram

我正在做约会书籍,我的主要想法是用“ngram”来做。 我进入了这里http://books.google.com/ngrams,我发现了那些具有最明确图表的ngram(多年来一直保持不变价值)。 然后我在python中编写了一个“读取”书籍的代码 - 它接受了本书,一些ngram,然后在文本中计算了ngram的频率。例如,文本中的“ex”“ex”“所有人都是爆炸性的”将会是0.05263157894736842,因为本文中有2个“ex”,并且有38个可能的2个字母组合,所以我认为ngram会是2/38。

所以我用1克(ABC)在很多书上做了这个计算,我和所有的书都得到了或多或少相同的数字。然后我回到谷歌的ngram,显然我得到的数字和他们获得的数字完全不同。例如,1gram“a”约为0.078,b为0.0135,因此一个,但Google的ngram是[a = 1.54]和[b = 0.0066] ......

我得出的结论是,我的计算都错了。现在,我问你ngram的 REAL 计算是什么。我真的需要理解这一点,如果您知道这件事是如何运作的,请告诉我。

非常感谢:)

回答后编辑:我确实得到了比谷歌更高的值,因为我的值是概率(0到1),所以如果我想将这个值转换为%,我必须乘以100,这是有意义的,因为英语中的字母“a”(8%)多于“a”字样。

2 个答案:

答案 0 :(得分:1)

您确定自己从Google报告的价值吗?频率范围从0到1,你的结果是引用1.54。如果我是你,我会检查一下。

http://en.wikipedia.org/wiki/Letter_frequency

这表示字母a的频率为0.08167。

您还应该意识到此频率基于特定样本。您假设当样本大小变得足够大时,字母外观的频率接近真值。

当我听到n-gram时,我通常会想到单词。 1克是一个单词(例如“苹果”);三元组是三个单词(例如“We the people”)。

答案 1 :(得分:0)

好的,所以我做了一些研究,@ duffymo实际上是对的。 如果它是一个单词或一个字母并不重要,谷歌的Ngram引擎会以一个单一的形式搜索它。例如,如果我写“a”,它会将“a”(带空格)搜索为单个单词。

我在代码中进行了一些更改,现在我得到了与Google相同的结果。

谢谢!