挑战年薪百万-自然语言处理入门二

浏览: 1860

简单统计

if __name__ == '__main__':

    saying = [
'After', 'all', 'is', 'said', 'and', 'done',

             
'more', 'is', 'said', 'than', 'done']

    tokens =
set(saying)

    tokens =
sorted(tokens)

   
print(tokens)

   
print(tokens[-2:])

因为我们经常需要在语言处理中使用频率分布,NLTK 中内置了它们。让我们使用FreqDist 寻找《白鲸记》中最常见的50 个词。尝试下面的例子,然后阅读接下来的解释

if __name__ == '__main__':
    fdist1=FreqDist(text1)
    print(fdist1.keys())
    print(fdist1.items())
    v = sorted(fdist1.items(),key=
lambda jj:jj[1],reverse=True)
    s = []
   
for i in range(len(v)):
        s.append(v[i][
0])
    print(s)
    fdist1.plot(
50,cumulative=True)

细粒度的选择单词

接下来,让我们看看文本中的长词,也许它们有更多的特征和信息量。为此我们采用集

合论的一些符号。我们想要找出文本词汇表长度中超过15 个字符的词,定义这个性质为P,则P(w)为真当且仅当词w 的长度大余15 个字符。现在我们可以用(1a)中的数学集合符号表示我们感兴趣的词汇。它的含义是:此集合中所有w 都满足w 是集合V(词汇表)的一个元素且w 有性质P。

(1) a. {w | w ∈ V & P(w)}

b. [w for w in V if p(w)]

(1b)给出了对应的Python表达式。(请注意,它产生一个链表,而不是集合,这意味

着可能会有相同的元素。)观察这两个表达式它们是多么相似。让我们进行下一步,编写可

执行的Python 代码:

if __name__ == '__main__':
    V =
set(text1)
    long_words = [w
for w in V if len(w) > 15]
   
print(sorted(long_words))

 

 ['CIRCUMNAVIGATION', 'Physiognomically','apprehensiveness', 'cannibalistically',

'characteristically','circumnavigating', 'circumnavigation', 'circumnavigations',

'comprehensiveness','hermaphroditical', 'indiscriminately', 'indispensableness',

'irresistibleness','physiognomically', 'preternaturalness', 'responsibilities',

'simultaneousness','subterraneousness', 'supernaturalness', 'superstitiousness',

'uncomfortableness','uncompromisedness', 'undiscriminating', 'uninterpenetratingly']

对于词汇表V 中的每一个词w,我们检查len(w)是否大于15;所有其他词汇将被忽略。

 

让我们回到寻找文本特征词汇的任务上来。请注意,text4 中的长词反映国家主题

——constitutionally(按宪法规定的,本质地),transcontinental(横贯大陆的)——而text

5 中的长词是非正规表达方式,例如boooooooooooglyyyyyy 和yuuuuuuuuuuuummmmmmmmmmmm。我们是否已经成功的自动提取出文本的特征词汇呢?好的,这些很长的词通常是hapaxes(即唯一的),也许找长词出现的频率会更好。这样看起来更有前途,因为这样忽略了短高频词(如the)和长低频词(如antiphilosophists)。以下是聊天语料库中所有长度超过7个字符出现次数超过7次的词:

if __name__ == '__main__':
    fdist1 = FreqDist(text4)
    long_words = [w
for w in set(text4)if len(w)> 7 and fdist1[w]> 7]
   
print(sorted(long_words))

 

注意我们是如何使用两个条件:len(w) > 7 保证词长都超过七个字母,fdist1[w]> 7

保证这些词出现超过7 次。最后,我们已成功地自动识别出与文本内容相关的高频词。这很小的一步却是一个重要的里程碑:一小块代码,处理数以万计的词,产生一些有信息量的输出。

推荐 2
本文由 Kenny 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册