最近在研究NLP的相关知识,然后就遇到了n-gram这个模型。拜读了高老师的博客后,觉得通俗易懂,所以对知识进行了以下整理。
维基百科的定义:在计算语言学中,n-gram指的是文本中连续的n个item(item可以是phoneme, syllable, letter, word或base pairs)
n-gram 中如果n=1则为unigram,n=2则为bigram,n=3则为trigram。n>4后,则直接用数字指称,如4-gram,5-gram。
示例
以 “我将要去美国”这句话为例。bigram结果为:
我将
将要
要去
去美
美国
用python3实现bigram模型
sent="我将要去美国"
bigram=[]
for i in range(len(sent)-1):
bigram.append(sent[i] + sent[i+1])
print(bigram)
输出结果:['我将', '将要', '要去', '去美', '美国']
示例
还是以 “我将要去美国”这句话为例。trigram结果为:
我将要
将要去
要去美
去美国
用python3实现trigram模型
sent="我将要去美国"
bigram=[]
for i in range(len(sent)-2):
trigram.append(sent[i] + sent[i+1] + sent[i+2])
print(trigram)
输出结果:['我将要', '将要去', '要去美', '去美国']
是不是感觉很简单呢?那我们继续来实现n-gram模型吧
def nGram(lst,n):
ngram=[]
for i in range(len(lst)-n+1):
ngram.append(lst[i:i+n])
print(ngram)
调用nGram()即可,sent="我将要去美国",n可以为小于len(lst)的一个数字
参考文献:http://blog.sina.com.cn/s/blog_5f4150730102wkdq.html