随笔分类 -  Python自然语言处理

《NLTK自然语言处理中文版》根据此书的学习,总结的简单的笔记
摘要:分词是一个更普遍的分割问题的一个实例。在这里我们还会看到分割问题的另外两个实例2.断句#NLTK的Punkt句子分割器sent_tokenizer=nltk.data.load(‘tokenizers/punkt/english.pickle’)text=nltk.corpus.gutenberg.raw(‘chesterton-thursday.txt’)sents=sent_tokenizer.tokenize(text)#注意:断句其实是困难的,因为在一些缩写里面也包括标记句子结束的句号。(6.2中还有一种断句方法)分词比如,会遇到这样的例子:a. doyouseethekittyb.s 阅读全文
posted @ 2013-05-24 20:11 createMoMo 阅读(1065) 评论(0) 推荐(0)
摘要:分词是将字符串切割成可识破的构成一块语言数据的语言单元。 分词的简单方法 raw = """'When I'M a Duchess,'she said to herself, (not in a very hopeful tone... though), 'I won'thave any pepper in mykitchenATALL.Soupdoesvery... wellwithout--M... 阅读全文
posted @ 2013-05-24 20:05 createMoMo 阅读(1574) 评论(0) 推荐(1)
摘要:词干提取器porter=nltk.PorterStemmer()lancaster=nltk.LancasterStemmer()[porter.stem(t) for t in tokens][lancaster.stem(t) for t in tokens] 词形归并#WordNet词形归并器删除词缀产生的词wnl=nltk.WordNetLemmatizer()[wnl.lemmatize(t) for t in tokens] 阅读全文
posted @ 2013-05-24 16:15 createMoMo 阅读(338) 评论(0) 推荐(0)
摘要:提取字符块#找到所有的无重叠的匹配指定的正则表达式re.findall(r’[aeiou]’,word)#看看一些文本中的两个或者两个以上的元音序列,并确定他们的相对频率wsf=sorted((set(nltk.corpus.treebank.words()))fd=nltk.FreqDist(vs for word in wsj for vs in re.findall(r’[aeiou]{2,}’,word))fd.items()在字符块上做更多事情#我们可以对元组进行索引操作,这样可以更方便的使用nltk.Index()查找词干抽出一个词的词干的方法有很多... 阅读全文
posted @ 2013-05-24 16:14 createMoMo 阅读(467) 评论(0) 推荐(0)
摘要:import re使用基本的元字符#检测以XXX为结尾[w for w in wordlist if re.search(‘ed$’,w)]#.匹配任何单个字符,^以X开头[w for w in wordlist if re.search(‘^..j..t..$’,w)]#?表示出现0或者1次(具体正则表达式相关内容,请查阅相关资料)范围与闭包#寻找一些由相同的按键次序打出的词汇[w for w in wordlist if re.search(‘^[ghi][mno][jkl][def]$’,w)]#+,*有的时候被称为Kleene闭包或者干脆闭包#一些常用的正则表达式基本元字符 阅读全文
posted @ 2013-05-24 16:12 createMoMo 阅读(358) 评论(0) 推荐(0)
摘要:Unicode支持超过一百万种字符;每个字符分配一个编号,成为编码点;在Python中,编码点写作\uXXXX的形式,其中XXXX是四位十六进制数;从文件中提取已编码文本#得到一个文件的路径(知道这个文件的编码)path= nltk.data.find('corpora/unicode_samples/polish-lat2.txt')import codecsf=codecs.open(path,encoding=’latin2’)#从文件对象f读出的文本将以Unicode返回,如果想在终端查看,必须使用合适的编码对它进行编码;unicode_escape是一种虚拟的编码fo 阅读全文
posted @ 2013-05-24 16:10 createMoMo 阅读(494) 评论(0) 推荐(0)
摘要:字符串的基本操作#字符串跨行(这种方式不会有换行,简单的字符串连接)Couplet=”Shall I compare thee to a Summer’s day?"\“Thou are more lovely and more temperate:”Couplet=(“Rough winds do shake the darling buds of May,”“And Summer’s lease hath all too short a date:”)#如果想包含换行,可以使用三重引号Couplet=”””Shall I compare thee to a Summer’s da 阅读全文
posted @ 2013-05-24 16:06 createMoMo 阅读(316) 评论(0) 推荐(0)
摘要:本章开始导入语句from __future__ import divisionimport nltk,re,pprint 3.1从网络和硬盘访问文本电子书from urllib import urlopenurl=”http://www.gutenberg.org/files/2554/2554.txt”raw=urlopen(url).read()#如果使用了Internet代理,需要手工指定代理proxies={‘http’:’http://www.someproxy.com:3128’}raw=urlopen(url,proxies=proxies).read()#对得到的文本分词操作t 阅读全文
posted @ 2013-05-24 16:05 createMoMo 阅读(392) 评论(0) 推荐(0)
摘要:WordNet是面向语义的英语词典,类似于传统词典,但具有更丰富的结构。NLTK中包括英语WordNet,有很多词和同义词的集合。意义与同义词具有相同含义的词是同义词。#在wordnet中怎样探索这些同义词from nltk.corpus import wordnet as wnWn.synsets(‘motorcar’)[Synset(‘car.n.01’)]通过对这段程度的分析可以知道:Motorcar只有一个可能的含义;这个含义被定义为car.n.01,car的第一个名词的意义。Car.n.01被称为synset或者同义词集#意思相同的词或者词条的集合wn.synset(‘car.n.0 阅读全文
posted @ 2013-05-24 10:08 createMoMo 阅读(728) 评论(0) 推荐(0)
摘要:词典或者词典资源是一个词/或短语以及一些相关信息的集合,例如:词性和词意定义等相关信息。一个词项包括词目(也叫词条)以及其他附加信息。例如:词性和词意定义。两个不同的词拼写相同,被称为同音异义词。词汇列表语料库NLTK包括一些仅仅包含词汇列表的语料库。#过滤文本,这个函数计算文本的词汇表,然后删除所有在现有的词汇列表中出现的元素,只留下罕见或者拼写错误的词。def unusual_words(text):text_vocab=set(w.lower() for w in text if w.isalpha())english_vocab=set(w.lower() for w in nltk. 阅读全文
posted @ 2013-05-24 10:04 createMoMo 阅读(461) 评论(0) 推荐(0)
摘要:使用文本编辑器创建程序我们可以通过Idle创建一个新的文件,然后输入代码,最后进行保存。比如我们保存了一个名为monty.py的文件,想引进做同样的事情的时候,就可以使用From monty import *函数例如我们可以自己定义具有某种功能的函数:def lexical_diversity(my_text_data): Word_count=len(my_text_data) Vocab_size=len(set(my_text_data)) Diversity_score=word_count/vocab_size return diversity_score模块在一个文件中... 阅读全文
posted @ 2013-05-22 12:32 createMoMo 阅读(286) 评论(0) 推荐(0)
摘要:条件概率分布是频率分布的集合,每个频率分布有一个不同的条件。这个条件通常是文本的类别。它的每对的形式是:(条件、事件)按文体计数词汇#先从语料库中设置条件频率分布From nltk.corpus import brownCfd=nltk.ConditionalFreqDist((genre,word)For genre in brown.categories()For word in brown.words(categories=genre)#可以选择自己感兴趣的进行查看,组成一个以对为元素的链表Genre_word=[(genre,word)For genre in [‘news’,’rom 阅读全文
posted @ 2013-05-22 12:30 createMoMo 阅读(666) 评论(0) 推荐(0)
摘要:古藤堡语料库(电子文本档案经过挑选的一小部分文本)#语料库中所有的文件Import nltkNltk.corpus.gutenberg.fileids() From nltk.corpus import GutenbergGutenberg.fileids()Emma=Gutenberg.words(‘austen-emma.txt’) #挑选其中的某一部著作进行操作Emma=nltk.corpus.gutenberg.words(‘austen-emma.txt’)Num_chars=len(Gutenberg.raw(fileid))Num_words=len(Gutenberg.word 阅读全文
posted @ 2013-05-22 12:27 createMoMo 阅读(2574) 评论(0) 推荐(0)
摘要:在11.4使用XML这一节当中,有一段代码在我的系统上运行不过去。书中给出了提示,如果Python在2.5以下的话,那么有可能会运行不过去。但是我查了自己的版本符合要求,是2.5的版本。具体的代码在这里:>>>from nltk.etree.ElementTree import ElementTree也就是引入XML处理的ElementTree这句的时候,出现了错误。Traceback (most recent call last): File "<pyshell#5>", line 1, in <module> from nltk 阅读全文
posted @ 2013-05-20 20:00 createMoMo 阅读(3080) 评论(0) 推荐(0)
摘要:我也是一名NLP的新手,导师给了我们入门的学习资料,便是《Natural Language Processing with Python》的国内爱好者免费翻译的中文版。在中文版中,难免有一些小错误,大部分错误经过自己的稍微仔细研读可以改正过来。 在这里发现了一处代码上的小错误,供大家分享。在11.3数据采集中的“处理濒危语言时特别注意事项”小节里面,有一处将辅音字母顺序规范化的代码。这段代码其实并不难理解。但是在中文版的翻译中,可能是由于排版者的不小心疏忽,造成了排版错误。在中文版的当中,这段代码是这样的:>>>mappings= [('ph', 'f 阅读全文
posted @ 2013-05-19 22:14 createMoMo 阅读(648) 评论(0) 推荐(0)
摘要:其实,出现这个问题很简单。会有三种可能:1、没有安装Prover9。你可以根据这个链接进行下载:http://www.cs.unm.edu/~mccune/mace4/download/LADR1007B-win.zip(适合Windows系统),如果你的操作系统是别的,那么也有相对应的版本,可以去官网进行下载。那么第2种可能,就是设置不当,还是会造成无法找到Prover9这个错误。根据Python的提示,“PROVER9HOMEenvironment variable”我们需要自己设置一个系统变量来使程序继续进行,当然也可以使用Python自带的设置函数。这里只介绍系统变量的方法。根据它的提 阅读全文
posted @ 2013-05-18 16:42 createMoMo 阅读(1777) 评论(0) 推荐(0)
摘要:一些前提数据:tokens = ['I', 'shot', 'an', 'elephant', 'in', 'my', 'pajamas']tokens为将要研究的一句英文句子。index={(DeT, N): NP, (Det, N, PP): NP, (NP, VP): S, (P, NP): PP, (V, NP): VP, (VP, PP): VP, ('I',): NP, ('an',): Det, ('elephant',) 阅读全文
posted @ 2013-05-16 15:51 createMoMo 阅读(524) 评论(0) 推荐(0)
摘要:Traceback (most recent call last):File "<pyshell#155>", line 3, in <module>print nltk.sem.show_raw_rtuple(rel,Icon=True,rcon=True)AttributeError: 'module' object has no attribute 'show_raw_rtuple'在7.6关系抽取中,有这样一段代码>>>IN = re.compile(r'.*\bin\b(?!\b.+ 阅读全文
posted @ 2013-05-15 16:32 createMoMo 阅读(902) 评论(0) 推荐(0)
摘要:元字符描述\将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如,“\n”匹配字符“n”。“\\n”匹配一个换行符。序列“\\”匹配“\”而“\(”则匹配“(”。^匹配输入字符串的开始位置。如果设置了RegExp对象的Multiline属性,^也匹配“\n”或“\r”之后的位置。$匹配输入字符串的结束位置。如果设置了RegExp对象的Multiline属性,$也匹配“\n”或“\r”之前的位置。*匹配前面的子表达式零次或多次。例如,zo*能匹配“z”以及“zoo”。*等价于{0,}。+匹配前面的子表达式一次或多次。例如,“zo+”能匹配“zo”以及“zoo” 阅读全文
posted @ 2013-05-15 15:47 createMoMo 阅读(299) 评论(0) 推荐(0)
摘要:在学到“训练基于分类器的分块器”这一小节的时候,在测试代码之后遇到了问题。class ConsecutiveNPChunkTagger(nltk.TaggerI): def __init__(self, train_sents): train_set = [] for tagged_sent in train_sents: untagged_sent = nltk.tag.untag(tagged_sent) history = [] for i, (word, tag) in enumerat... 阅读全文
posted @ 2013-05-15 10:26 createMoMo 阅读(1914) 评论(0) 推荐(0)