您的位置:首页 > 编程语言 > Python开发

python自然语言处理-学习笔记(一)

2014-06-08 15:11 459 查看
      打算用python写点东西又想学一些机器学习方面的东西,正好看到《python自然语言处理》这本书,在这里好好学习一下,做些笔记,主要记录自己的一些想法和遇到的问题,有什么认识性的错误,还希望看到的人指正

     第一章,基本上就是简单的入门和一些尝试性的操作,首先是安装nltk(python的安装,很简单,我就不赘述了),我的环境是ubuntu12.04LTS,nltk的安装可以按照nltk官网的说明来操作,具体在这里,在安装pyyaml的时候,可能会遇到这个错误,“yaml.h:没有那个文件或目录”,我安装的时候,查了半天也不知道这是怎么回事,后来发现需要安装libyaml这个库,需要先安装这个库才行,安装的说明在这里,安装好库,再安装就没有问题了

    今天继续了看了一部分,忍不住吐槽一下,为什么我这里的执行结果和书上的不一样呢,每次都要处理一下才能得到书上的结果,在这里列举一下,希望能记录一下,或者可以帮助到遇到相同问题的人,或者哪位大牛可以帮我解答一下为什么我的和别人的不一样。。。

    首先是FreqDist()函数,返回来的结果并不是排序好的字典啊。。。我默认执行的结果是

>>> fdist1 = FreqDist(text1)
>>> fdist1
<FreqDist with 19317 samples and 260819 outcomes>
>>> vocabulary1 = fdist1.keys()
>>> vocabulary1[:50]
[u'funereal', u'unscientific', u'divinely', u'foul', u'four', u'gag', u'prefix', u'woods', u'clotted', u'Duck', u'hanging', u'plaudits', u'woody', u'Until', u'marching', u'disobeying', u'canes', u'granting', u'advantage', u'Westers', u'insertion', u'DRYDEN', u'formless', u'Untried', u'superficially', u'Western', u'portentous', u'meadows', u'sinking', u'Ding', u'Spurn', u'treasuries', u'churned', u'oceans', u'invasion', u'powders', u'tinkerings', u'tantalizing', u'yellow', u'bolting', u'uncertain', u'stabbed', u'bringing', u'elevations', u'ferreting', u'wooded', u'songster', u'uttering', u'scholar', u'Less']
>>>
     我不是很明白这是为什么,难道是版本的问题。。。下面我加了一些函数之后得到和书上一样的版本:

>>> fdist1 = FreqDist(text1)
>>> vocabulary1 = sorted(fdist1.iteritems(),key = lambda asd:asd[1],reverse=True)
>>> vocabulary2 = [item[0] for item in vocabulary1]
>>> vocabulary2[:50]
[u',', u'the', u'.', u'of', u'and', u'a', u'to', u';', u'in', u'that', u"'", u'-', u'his', u'it', u'I', u's', u'is', u'he', u'with', u'was', u'as', u'"', u'all', u'for', u'this', u'!', u'at', u'by', u'but', u'not', u'--', u'him', u'from', u'be', u'on', u'so', u'whale', u'one', u'you', u'had', u'have', u'there', u'But', u'or', u'were', u'now', u'which', u'?', u'me', u'like']
     至于下面的fdist1.plot(50,cumulative=True)我得到的是计数,而不是频率,这个我处理不了了,只能跳过了

     接着是bigrams()这个函数,按照书上来,我得到的执行结果是

>>> bigrams(['more', 'is', 'said', 'than', 'done'])
<generator object bigrams at 0x144bb824>
>>>
   又是无语。。。查了一下nltk官网上的函数说明(链接在这里)才知道,要加list()函数,结果才是书上的情况,执行结果如下:
>>> list(bigrams(['more', 'is', 'said', 'than', 'done']))
[('more', 'is'), ('is', 'said'), ('said', 'than'), ('than', 'done')]
>>>


1.5自动理解自然语言

     这一小节里,提到了一些那个去的词汇,这里记录如下:

     词意消歧:主要是某些词,可能会引起歧义,如果在机器学历里面直接翻译的话,会导致词不达意,等等,例如文中提到的by,the book by Chesterton 和 submit by friday,一个词在适当的语境要按照对应的语境来翻译。

     指代消解:主要是代词的使用,也要理解上下文来进行理解

   

     接下来是,机器翻译的部分,这里有一个尝试的函数babelize_shell(),但是,输入的结果如下:

>>> babelize_shell()
Babelfish online translation service is no longer available.
    查询了nltk官网,看到函数的具体说明,其实和打印出来的差不多,这里就不贴了,感兴趣的可以看这里

今天先这样,读书的笔记会一直这样写下去,我会按照章节来写,希望如果有一起学习的人,可以一起交流一下
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息