自然语言处理的一些基础技巧小总结

自然语言处理的一些基础技巧小总结


研二下半期了,开始写毕业论文。东拼西凑了一些小技巧,说实话没有人从头开始做word2vec然后一直做到自己项目的内容,基础的功能只需要调用就可以了。


计算word的相似度
>>> dog = wn.synset('dog.n.01')
>>> cat = wn.synset('cat.n.01')
>>> dog.path_similarity(cat)
0.20000000000000001
>>> dog.wup_similarity(cat)
0.8571428571428571
#另外的方法
>>> from nltk.corpus import wordnet_ic
>>> brown_ic = wordnet_ic.ic('ic-brown.dat')
>>> semcor_ic = wordnet_ic.ic('ic-semcor.dat')
>>> from nltk.corpus import genesis
>>> genesis_ic = wn.ic(genesis, False, 0.0)
>>> dog.res_similarity(cat, brown_ic)
7.9116665090365768
>>> dog.res_similarity(cat, genesis_ic)
7.1388833044805002
分词和标注
>>> import nltk
>>> sentence = """At eight o'clock on Thursday morning
... Arthur didn't feel very good."""
>>> tokens = nltk.word_tokenize(sentence)
>>> tokens
['At', 'eight', "o'clock", 'on', 'Thursday', 'morning',
'Arthur', 'did', "n't", 'feel', 'very', 'good', '.']
>>> tagged = nltk.pos_tag(tokens)
>>> tagged[0:6]
[('At', 'IN'), ('eight', 'CD'), ("o'clock", 'JJ'), ('on', 'IN'),
('Thursday', 'NNP'), ('morning', 'NN')]

然后进行识别命名实体 (Identify named entities)

>>> entities = nltk.chunk.ne_chunk(tagged)
>>> entities
Tree('S', [('At', 'IN'), ('eight', 'CD'), ("o'clock", 'JJ'),
           ('on', 'IN'), ('Thursday', 'NNP'), ('morning', 'NN'),
       Tree('PERSON', [('Arthur', 'NNP')]),
           ('did', 'VBD'), ("n't", 'RB'), ('feel', 'VB'),
           ('very', 'RB'), ('good', 'JJ'), ('.', '.')])

语义树:

>>> from nltk.corpus import treebank
>>> t = treebank.parsed_sents('wsj_0001.mrg')[0]
>>> t.draw()
(暂时我也不知这句话哪来的)

自然语言处理的一些基础技巧小总结_第1张图片

Brown英语语料库

一个百万词级的英语语料库,按文体进行分类

import nltk
nltk.download()

# 导入Brown Corpus
from nltk.corpus import brown
brown.words()
Text对象

基本操作:

#打印出输入单词在文本中出现的上下文
text1.concordance('monstrous')
#打印出和输入单词具有相同上下文的其他单词
text1.similar('monstrous')
#接受一个单词列表,会打印出列表中所有单词共同的上下文
text1.common_contexts(['monstrous', 'gamesome'])
#绘制每个单词在文本中的分布情况
text4.dispersion_plot(['freedom', 'America'])
#返回该单词在文本中出现的次数
text1.count('monstrous')
#打印出文本中频繁出现的双连词
text1.collocations()

这是一个中文例子(对青春爱情小说《被遗忘的时光》做下简单的分析),稍晚补充英文例子:

import ntlk
import jieba

raw=open('forgotten_times.txt').read()
text=nltk.text.Text(jieba.lcut(raw))
print text.concordance(u'风花雪月')
>>> Displaying 2 of 2 matches:
彼时 校园 民谣 不复 大热 了 , 但 处身 校园 , 喜欢 吟唱 风花雪月 的 感性 青年 还是 喜欢 借此 抒怀 。 邵伊敏 平常 听 英语歌 较
的 眼睛 看 的 是 自己 , 迷恋 的 却 多半 只是 少女 心中 的 风花雪月 , 而 迷恋 过后 不可避免 不是 失望 就是 幻灭 。 他 将 目光
词干提取/词性归一

Stemming词干提取:Walking变成 walk
Lemmatization词性归一 :went变成 go

from nltk.stem.porter import PorterStemmer

porter_stemmer = PorterStemmer()

porter_stemmer.stem(‘presumably’)  #输出u’presum’



from nltk.stem import WordNetLemmatizer

wordnet_lemmatizer = WordNetLemmatizer()

wordnet_lemmatizer.lemmatize(‘dogs’)  #输出:‘u’dog’
词性标注

lemmatizer 能输出该词为名词或者动词这些功能。
pos_tag: 也能标注词性

text = nltk.word_tokenize('what does the fox say')
nltk.pos_tag(text)

#输出结果:
[('what', 'WDT'), ('does', 'VBZ'), ('the','DT'), ('fox', 'NNS'), ('say', 'VBP')]
去除一些不必要的结尾词
from nltk.corpus import stopwords

filtered_words = [word for word in word_list if word not instopwords.words('english')]
元素频率FreqDist

通过FreqDist(类似一个字典),查看元素出现的次数。

fdist = FreqDist(tokens)
# 它就类似于⼀一个DicT
print(fdist['is']) 

#此刻, 我们可以把最常⽤用的50个单词拿出来
standard_freq_vector = fdist.most_common(50)
size = len(standard_freq_vector)
print(standard_freq_vector)

未完待续

你可能感兴趣的:(随感,Python,机器学习)