自然语言处理(二)

时间:2021-08-10 01:31:04

一:词链表的概念

        词链表其实就是Python中序列的意思,只不过这个列表存储的内容是一个个单词。字、词、句、段落再到篇章,由小到大。如:

sentence=['call','me','Ishmael'],这就是一个简单的词链表。关于列表是Python的存储结构,另外两种还有字典及元祖,值得注意的是元祖和字符串是不可变的序列。关于序列的相关操作如分片、合并、索引等可以查阅相关书籍。

     这里有几个基本操作列一下:

     (1)追加单词:sentence.append('word')。在sentence 的列表尾部添加一个指定单词word。

     (2)返回一个列表中指定单词的索引值(即位置序号),sentence.index('word')。

     (3)找出指定索引位置的单词:sentence[i],假设列表长度为n,则i的范围为0至n-1。

     (4)分片(切片)操作:sentence[i:j],提取出列表中i到j上的单词,但是不包括sentencep[j]。

二:简单统计单词的词频分布:FreqDist(text)函数

       nltk中使用函数Freq_num=FreqDist(text)就可以统计出每个单词的词频,非常方便,另一种方法是是使用count方法一个单词一个单词的统计次数,这种方法非常笨拙,且循环量大,不采用。

      FreqDist(text)返回的是一个字典,对应的键为单词,值为该单词出现的次数。利用字典,可以找到该字典中前n个出现的单词是什么。注意字典中的键不可被查找。利用命令Freq_num['whale'],即可查找到whale这个单词出现的次数。注意:字典是按键来存取,而不是通过序号即偏移来存取值。

       此外,利用这个函数还可以绘制最常出现的n个单词的出现频数分布图。

    如:Freq_num.plot(50,cumulative=True),表示绘制最常出现的50个单词的出现频数分布图,如下:

自然语言处理(二)

         此外,利用函数hapaxes还可以绘制统计出只出现一次的低频次。

如:print(Freq_num.hapaxes())

         统计固定长度的单词:

统计长度大于15且词频大于7的单词,命令如下:

V=set(text)

long_words=[w for w in V if len(w)>15 and Freq_num[w]>7]

sorted(long_words)#排序。

          统计固定搭配的双联词语:text.collocations()

          统计指定单词的搭配情况:

from nltk.util import bigrams  

list(bigrams(['word1','word2',...])

其他统计结果:

自然语言处理(二)