目前N-gram最为有用的就是自然语言的自动分类功能。
基于n-gram的自动分类方法有两大类,
一类是人工干预的分类(Classification),又称分类;
一类是无人工干预的分类(Clustering),又称聚类。
N-Gram距离定义为:
∣
G
N
(
s
)
+
G
N
(
t
)
∣
−
2
X
∣
G
N
(
s
)
∩
G
N
(
t
)
∣
|G_N(s)+G_N(t)|-2X|G_N(s)∩G_N(t)|
∣GN(s)+GN(t)∣−2X∣GN(s)∩GN(t)∣
(
N
N
N的意思是在s中每两个字符进行分割,分割的结果作为最小单位)
扯白了其实就是差异化,上述式子的值(范围)越小,那么就说明两个句子越相似,反之,则差异越大。
举例[2]:
∣
G
N
(
s
)
∣
|G_N(s)|
∣GN(s)∣ 是字符串 s 的 N-Gram集合,N 值一般取2或者3,假设N=2为例对字符串Gorbachev和Gorbechyov进行分段:
20160429144714271
距离:8 + 9 − 2 × 4 = 9
------------------------------------N-Gram代码应用------------------------------------
https://github.com/appleyuchi/Ngram
-------------------------------------------附录----------------------------------------------
input
一般使用默认即可,可以设置为"filename’或’file’
encodeing
使用默认的utf-8即可,分析器将会以utf-8解码raw document
decode_error
默认为strict,遇到不能解码的字符将报UnicodeDecodeError错误,设为ignore将会忽略解码错误,还可以设为replace,作用尚不明确
strip_accents
默认为None,可设为ascii或unicode,将使用ascii或unicode编码在预处理步骤去除raw document中的重音符号
analyzer
一般使用默认,可设置为string类型,如’word’, ‘char’, ‘char_wb’,还可设置为callable类型,比如函数是一个callable类型
preprocessor
设为None或callable类型
tokenizer
设为None或callable类型
ngram_range
词组切分的长度范围,ngram_range(min,max)是指将text分成min,min+1,min+2,…max 个不同的词组
比如’Python is useful’中ngram_range(1,3)之后可得到’Python’ ‘is’ ‘useful’ ‘Python is’ ‘is useful’ 和’Python is useful’如果是ngram_range (1,1) 则只能得到单个单词’Python’ ‘is’和’useful’
stop_words
设置停用词,设为english将使用内置的英语停用词,设为一个list可自定义停用词,设为None不使用停用词,设为None且max_df∈[0.7, 1.0)将自动根据当前的语料库建立停用词表
lowercase
将所有字符变成小写
token_pattern
过滤规则,表示token的正则表达式,需要设置analyzer == ‘word’,默认的正则表达式选择2个及以上的字母或数字作为token,标点符号默认当作token分隔符,而不会被当作token
max_df
可以设置为范围在[0.0 1.0]的float,也可以设置为没有范围限制的int,默认为1.0。这个参数的作用是作为一个阈值,当构造语料库的关键词集的时候,如果某个词的document frequence大于max_df,这个词不会被当作关键词。如果这个参数是float,则表示词出现的次数与语料库文档数的百分比,如果是int,则表示词出现的次数。如果参数中已经给定了vocabulary,则这个参数无效
min_df
类似于max_df,不同之处在于如果某个词的document frequence小于min_df,则这个词不会被当作关键词
max_df用于删除过于频繁出现的术语,也称为“语料库特定的停用词”.例如:
max_df = 0.50表示“忽略出现在50%以上文档中的术语”.
max_df = 25表示“忽略超过25个文档中出现的术语”.
默认的max_df是1.0,这意味着“忽略出现在100%以上文档中的术语”.因此,默认设置不会忽略任何术语.
min_df用于删除不经常出现的术语.例如:
min_df = 0.01表示“忽略出现在少于1%的文档中的术语”.
min_df = 5表示“忽略少于5个文档中出现的术语”.
max_features
默认为None,可设为int,对所有关键词的term frequency进行降序排序,只取前max_features个作为关键词集
vocabulary
默认为None,自动从输入文档中构建关键词集,也可以是一个字典或可迭代对象?
binary
默认为False,一个关键词在一篇文档中可能出现n次,如果binary=True,非零的n将全部置为1,这对需要布尔值输入的离散概率模型的有用的
dtype
使用CountVectorizer类的fit_transform()或transform()将得到一个文档词频矩阵,dtype可以设置这个矩阵的数值类型
Reference:
[1]TfidfVectorizer(stop_words=‘english’,ngram_range=(1,1))中ngram_range的意义
[2]字符串间距离 N-Gram