英文词干提取器,import nltk,porter = nltk.PorterStemmer(),porter.stem('lying')。
词性标注器,pos_tag处理词序列,根据句子动态判断,import nltk,text = nltk.word_tokenize("And now for something completely different”),nltk.pos_tag(text)。CC连接词,RB副词,IN介词,NN名次,JJ形容词。
nltk中文语料库,nltk.download()。下载Corpora sinica_treebank,中国台湾中国研究院。
# coding:utf-8
import sys
import importlib
importlib.reload(sys)
import nltk
print(word[],word[1])
jieba切词,https://github.com/fxsjy/jieba,自定义语料中文切词,自动词性标注。
词性自动标注。默认标注器DefaultTagger,标注为频率最高词性。
# coding:utf-8
import sys
import importlib
importlib.reload(sys)
import nltk
default_tagger = nltk.DefaultTagger('NN')
raw = '我好想你'
tokens = nltk.word_tokenize(raw)
tags = default_tagger.tag(tokens)
print(tags)
正则表达式标注器,RegexpTagge,满足特定正则表达式词性。
# coding:utf-8
import sys
import importlib
importlib.reload(sys)
import nltk
pattern =[(r'.*们$','PRO')]
tagger = nltk.RegexpTagger(pattern)
print(tagger.tag(nltk.word_tokenize('我们一起去你们和他们去过的地方')))
查询标注器,多个最频繁词和词性,查找语料库,匹配标注,剩余词用默认标注器(回退)。
一元标注,已标注语料库训练,模型标注新语料。
# coding:utf-8
import sys
import importlib
importlib.reload(sys)
import nltk
tagged_sents =[[(u'我',u'PRO'),(u'小兔',u'NN')]]
unigram_tagger = nltk.UnigramTagger(tagged_sents)
sents =[[u'我',u'你',u'小兔']]
# unigram_tagger = nltk.UnigramTagger(brown_tagged_sents)
tags = unigram_tagger.tag(sents[])
print(tags)
二元标注、多元标注,一元标注UnigramTagger只考虑当前词,不考虑上下文。二元标注器BigramTagger考虑前面词。三元标注TrigramTagger。
组合标注器,提高精度和覆盖率,多种标注器组合。
标注器存储,训练好持久化,存储硬盘。加载。
# coding:utf-8
import sys
import importlib
importlib.reload(sys)
import nltk
train_sents =[[(u'我',u'PRO'),(u'小兔',u'NN')]]
t0 = nltk.DefaultTagger('NN')
t1 = nltk.UnigramTagger(train_sents,backoff=t0)
t2 = nltk.BigramTagger(train_sents,backoff=t1)
sents =[[u'我',u'你',u'小兔']]
tags = t2.tag(sents[])
print(tags)
from pickle import dump
print(t2)
output = open('t2.pkl','wb')
dump(t2,output,-1)
output.close()
from pickle import load
input = open('t2.pkl','rb')
tagger = load(input)
input.close()
print(tagger)
机器学习,训练模型,已知数据统计学习;使用模型,统计学习模型计算未知数据。有监督,训练样本数据有确定判断,断定新数据。无监督,训练样本数据没有判断,自发生成结论。最难是选算法。
贝叶斯,概率论,随机事件条件概率。公式:P(BA)=P(AB)P(B)/P(A)。已知P(AB)、P(A)、P(B),计算P(BA)。贝叶斯分类器:
# coding:utf-8
import sys
import importlib
importlib.reload(sys)
import nltk
my_train_set =[
({'feature1':u'a'},'1'),
({'feature1':u'a'},'2'),
({'feature1':u'a'},'3'),
({'feature1':u'a'},'3'),
({'feature1':u'b'},'2'),
({'feature1':u'b'},'2'),
({'feature1':u'b'},'2'),
({'feature1':u'b'},'2'),
({'feature1':u'b'},'2'),
({'feature1':u'b'},'2'),
]
classifier = nltk.NaiveBayesClassifier.train(my_train_set)
print(classifier.classify({'feature1':u'a'}))
print(classifier.classify({'feature1':u'b'}))
分类,最重要知道哪些特征最能反映分类特点,特征选取。文档分类,最能代表分类词。特征提取,找到最优信息量特征:
# coding:utf-8
import sys
import importlib
importlib.reload(sys)
import nltk
from nltk.corpus import movie_reviews
import random
documents =[(list(movie_reviews.words(fileid)),category)for category in movie_reviews.categories()for fileid in movie_reviews.fileids(category)]
random.shuffle(documents)
all_words = nltk.FreqDist(w.lower()for w in movie_reviews.words())
word_features =[word for(word,freq)in all_words.most_common(2000)]
def document_features(document):
document_words = set(document)
features = {}
for word in word_features:
features['contains(%s)' % word]=(word in document_words)
return features
featuresets =[(document_features(d),c)for(d,c)in documents]
# classifier = nltk.NaiveBayesClassifier.train(featuresets)
# classifier.classify(document_features(d))
train_set,test_set = featuresets[100:],featuresets[:100]
classifier = nltk.NaiveBayesClassifier.train(train_set)
classifier.show_most_informative_features(5)
词性标注,上下文语境文本分类。句子分割,标点符号分类,选取单独句子标识符合并链表、数据特征。识别对话行为,问候、问题、回答、断言、说明。识别文字蕴含,句子能否得出另一句子结论,真假标签。
参考资料:
https://www.jianshu.com/p/6e5ace051c1e
《Python自然语言处理》
领取专属 10元无门槛券
私享最新 技术干货