2017-04-05 40 views
1

的四克字TEXT的非对称填充是的n-gram在NLTK

>>generated_ngrams = ngrams('TEXT', 4, pad_left=True, pad_right=True, left_pad_symbol=' ', right_pad_symbol=' ') 

>>list(generated_ngrams) 
[(' ', ' ', ' ', 'T'), (' ', ' ', 'T', 'E'), (' ', 'T', 'E', 'X'), ('T', 'E', 'X', 'T'), ('E', 'X', 'T', ' '), ('X', 'T', ' ', ' '), ('T', ' ', ' ', ' ')] 

根据我的输出应该是_TEX, TEXT, EXT__, XT__。 根据这个网站(http://cloudmark.github.io/Language-Detection/)输出是_TEX, TEXT, EXT_, XT__, T___
它也继续说:“一般来说,一个长度为k的字符串,用空白填充,将有k + 1个二元组,k + 1个三元组,k +1四分法等等。“
基于我从Python获得的输出,我不认为这是有效的。
请解释一下。

+0

当你这么说的时候,根据你的说法,左右填充不应该是对称的,你的推理是什么?请解释。 – lenz

回答

3

填充确保实际字符串的每个符号出现在ngram的所有位置。因此,对于4克,随着代码的显示,将会有最后一个符号的三个填充ngram,即E X T _,X T _ _T _ _ _等。

您链接到的网站在左侧添加了一个空间,然后在右侧正确填充。这就是为什么计数是不同的。这给所有长度的相同数量的ngram。这是对应的Python代码:

generated_ngrams = ngrams(" " + 'TEXT', 4, 
          pad_left=False, pad_right=True, right_pad_symbol=' ') 

为什么有人做过这样,只有博客的作者真正知道。但是在右边而不是在左边填充的一个结果是,正如博客指出的那样,对于任何n-gram大小n,给定的长度为k的字符串将产生固定数量的n元组(k+1)。最初的空间对此没有贡献,但作为一个字边界符号:以空格开头的ngram是词首字母。

+1

为什么这样做?请用一个例子来解释。 –

+0

谁知道?阅读你引用的博客,看看为什么。或者是一本教科书。最初的空间可能是一个单词分隔符,我已经解释了填充。 – alexis

+0

明白了!谢谢 –

2

@alexis答案将为您提供单字左左垫和多字符右垫。

如果我们仔细阅读博客帖子:

我们也将追加空格来开始和字符串的结束,以帮助开始-的字和结束字的情况下匹配。

我们将使用_字符来表示这个。鉴于字文我们将获得以下N元:

bi-grams _T, TE, EX, XT, T_ 
tri-grams _TE, TEX, EXT, XT_, T__ 
quad-grams _TEX, TEXT, EXT_, XT__, T___ 

非对称填充的动机还不清楚。

与博文继续:

在长度为k的一般的字符串,使用空白填充,将有K + 1双克,K + 1三克,K + 1四克等等。

从NLTK执行和对称的填充,它应该是:

甲具体地,长度为k对称的填充用空格的字符串将产生k + (n-1) n元语法。对于情况下词是TEXT

>>> from functools import partial 
>>> from nltk import ngrams 
>>> padded_ngrams = partial(ngrams, pad_left=True, pad_right=True, left_pad_symbol='_', right_pad_symbol='_') 
>>> x = 'TEXT' 

>>> list(ngrams(x, 2)) 
[('T', 'E'), ('E', 'X'), ('X', 'T')] 
>>> len(list(ngrams(x, 2))) 
3 

>>> list(padded_ngrams(x, 2)) 
[('_', 'T'), ('T', 'E'), ('E', 'X'), ('X', 'T'), ('T', '_')] 
>>> len(list(padded_ngrams(x, 2))) 
5 
>>> len(list(padded_ngrams(x, 3))) 
6 
>>> len(list(padded_ngrams(x, 4))) 
7 
>>> len(list(padded_ngrams(x, 5))) 
8 

要主张对称与非对称的填充,有原则的测试方法,数据集,并看到一个分类任务的特征的效果。

+0

感谢您分享您的见解。我无法为您的答案投票,因为我没有任何要点。再次感谢你。 –

+0

不用担心; P我希望这个答案对你有帮助,并且可能为将来的用户记录下来。 – alvas

+0

如何记录它? –