《使用Python进行自然语言处理》学习笔记三

第二章 获得文本语料和词汇资源

2.1 获取文本语料库

1 古腾堡语料库

Project Gutenberg的语料库包含

>>>import nltk

>>>from nltk.corpus import gutenberg

>>>gutenberg.fileids()

['austen-emma.txt','austen-persuasion.txt', 'austen-sense.txt', 'bible-kjv.txt','blake-poems.txt','bryant-stories.txt', 'burgess-busterbrown.txt','carroll-alice.txt','chesterton-ball.txt', 'chesterton-brown.txt', 'chesterton-thursday.txt','edgeworth-parents.txt', 'melville-moby_dick.txt','milton-paradise.txt','shakespeare-caesar.txt', 'shakespeare-hamlet.txt',

'shakespeare-macbeth.txt','whitman-leaves.txt’]

调用使用:

>>>emma = nltk.corpus.gutenberg.words('austen-emma.txt')

#num_chars 变量计数了空白字符

#row()对文件的内容不进行任何语言处理

#sents()函数把文本划分成句子,其中每一个句子是一个词链表

非正规文本语料库

>>> from nltk.corpus import webtext

>>> for fileid in webtext.fileids():

即时消息聊天会话语料库

>>> from nltk.corpus import nps_chat

>>> chatroom =nps_chat.posts('10-19-20s_706posts.xml')

>>> chatroom[123]

2 布朗语料库

布朗语料库是第一个百万词级的英语电子语料库的,由布朗大学于 1961 年创建。这个语料库包含 500 个不同来源的文本,按照文体分类,如:新闻、社论等。(详情P58)

见代码NltkTest59(建议,如果电脑配置有限在执行书上的指令时需要注意,有的书里打了省略号的地方如取得fileids的时候,其实内容特别多,需要检查的目录也特别多,可能会需要很长的等待时间)

《使用Python进行自然语言处理》学习笔记三_第1张图片

3 路透社语料库

路透社语料库包含 10,788 个新闻文档,共计 130 万字。这些文档分成 90 个主题,按照“训练”和“测试”分为两组。与布朗语料库不同,路透社语料库的类别是有互相重叠的,只是因为新闻报道往往涉及多个主题。我们可以查找由一个或多个文档涵盖的主题,也可以查找包含在一个或多个类别中的文档。

《使用Python进行自然语言处理》学习笔记三_第2张图片

4 就职演说语料库

语料库实际上是 55 个文本的集合,每个文本都是一个总统的演说。这个集合的一个有趣特性是它的时间维度。

《使用Python进行自然语言处理》学习笔记三_第3张图片

这里书上提供的程序时无法正常运行的,因为运行出错,出这个问题的原因是BabelfishChangedError Thrown when babelfish.yahoo.com changes somedetail of their HTML layout, and babelizer no longer submits data in thecorrect form, or can no longer parse the results”。现在里面调用的是MicrosoftTranslator web service (SOAP),和书里用的版本不一致。可以通过查询当前版本的文档进行调用。参考解决方案:http://stackoverflow.com/questions/12267544/machine-translation-using-babelize-shell-in-nltk

目前没能解决,好可惜啊,一个有意思的图没能画出来。不过也说明一个问题,Windows做开发有的时候确实是不给力啊,真正开始做系统的时候还是linux吧。

5 标注文本语料库

NLTK 包含多国语言语料库。“世界人权宣言” (udhr )语料库中不同语言版本中的字长差异。

cumulative=True时

《使用Python进行自然语言处理》学习笔记三_第4张图片

cumulative=False时

《使用Python进行自然语言处理》学习笔记三_第5张图片

好吧,我觉得False时比较容易看懂,True时看着比较高端。

6 文本语料库的结构

NLTK 语料库阅读器支持高效的访问大量语料库,并且能用于处理新的语料库。NLTK 中定义的基本语料库函数。P65

7 载入你自己的语料库

(1) 将变量corpus_root的值设置为自己的语料的文件夹目录

(2) PlaintextCorpusReader 初始化函数的第二个参数可以是需要加载的文件,可以使用正则表达式

(3) CropsBPCRTest导入txt一类的数据很顺利,但是BracketParseCorpusReader载入宾州树库的实验是失败的,我看了自己的宾州树库语料库与书中描述的不一致但是不应该啊,还没有找到原因,先留下这个悬案,待日后再审。

 

[python]  view plain copy
  1. #!/usr/python/bin  
  2. #Filename:NltkTest59,一些关于语料库使用的测试  
  3. importnltk  
  4. fromnltk.corpus import brown  
  5. fromnltk.corpus import reuters  
  6. fromnltk.corpus import inaugural  
  7. fromnltk.corpus import udhr  
  8. fromnltk.corpus import BracketParseCorpusReader  
  9. fromnltk.corpus import PlaintextCorpusReader  
  10.    
  11. classNltkTest59:  
  12.     def __init__(self):  
  13.         print 'Initing...'  
  14.     def BrownTest(self,genres,modals):  
  15.         '''''来源于p59,对于不同问题的常用词统计的测试'''  
  16.         cfd = nltk.ConditionalFreqDist(\  
  17.             (genre, word)\  
  18.             for genre in brown.categories()\  
  19.             for word inbrown.words(categories=genre))  
  20.         cfd.tabulate(conditions=genres,samples=modals)  
  21.     def ReutersTest(self):  
  22.         # reuters.fileids()  
  23.         # reuters.categories()  
  24.         printreuters.categories('training/9865')  
  25.         printreuters.categories(['training/9865''training/9880'])  
  26.         # reuters.fileids('barley')  
  27.         # reuters.fileids(['barley', 'corn'])  
  28.         print reuters.words('training/9865')[:14]  
  29.         print reuters.words(['training/9865','training/9880'])  
  30.         printreuters.words(categories='barley')  
  31.         printreuters.words(categories=['barley''corn'])  
  32.     def InauguralTest(self):  
  33.         '''''运行会出错 '''  
  34.         cfd=nltk.ConditionalFreqDist(\  
  35.             (target, file[:4])\  
  36.             for fileids in inaugural.fileids()\  
  37.             for w in inaugural.words(fileids)\  
  38.             for target in ['america','citizen']\  
  39.             if w.lower().startswith(target))  
  40.         cfd.plot()  
  41.     def UdhrTest(self):  
  42.         languages = ['Chickasaw''English','German_Deutsch',\  
  43.                      'Greenlandic_Inuktikut','Hungarian_Magyar''Ibibio_Efik']  
  44.         cfd=nltk.ConditionalFreqDist(\  
  45.             (lang, len(word))\  
  46.             for lang in languages\  
  47.             for word in udhr.words(lang +'-Latin1'))  
  48.         cfd.plot(cumulative=False)  
  49.     def CropsPCRTest(self):  
  50.         corpus_root=r'C:\corpora\udhr2'  
  51.         file_pattern=r'.*'  
  52.         encoding='utf-8'  
  53.         pcr=PlaintextCorpusReader(corpus_root,file_pattern)  
  54.         print pcr.fileids()  
  55.         print pcr.words('007.txt')  
  56.     def CropsBPCRTest(self):  
  57.         '''''可耻的失败了,没法运行,可能是语料库版本问题,或者其他,待查'''  
  58.        corpus_root=r'C:\corpora\penntreebank\parsed'  
  59.         file_pattern=r'*.wsj'  
  60.        ptb=BracketParseCorpusReader(corpus_root, file_pattern)  
  61.         print ptb.fileids()  
  62.         print len(ptb.sents())  
  63.         ptb.sents(fileids='\wsj_0001.mrg')[19]  
  64.    
  65.          
  66.         
  67. nt59=NltkTest59()  
  68. genres= ['news''religion''hobbies''science_fiction''romance''humor']  
  69. modals= ['can''could''may''might''must''will']  
  70. #nt59.BrownTest(genres,modals)  
  71. #nt59.ReutersTest()  
  72. #不能运行,因为存在SOAP版本错误,不急着解决,以后再补一个解决方案  
  73. #nt59.InauguralTest()  
  74. nt59.UdhrTest()  
  75. #nt59.CropsPCRTest()  
  76. #nt59.CropsBPCRTest()  


转自http://blog.csdn.net/caicai1617/article/details/21095847

你可能感兴趣的:(《使用Python进行自然语言处理》学习笔记三)