专栏首页利炳根的专栏学习笔记CB002:词干提取、词性标注、中文切词、文档分类
原创

学习笔记CB002:词干提取、词性标注、中文切词、文档分类

英文词干提取器,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 形容词。

标注自定义词性标注语料库,tagged_token = nltk.tag.str2tuple('fly/NN') 。字符串转成二元组。布朗语料库标注 nltk.corpus.brown.tagged_words() 。

nltk中文语料库,nltk.download()。下载 Corpora sinica_treebank,中国台湾中国研究院。

# coding:utf-8

import sys

import importlib

importlib.reload(sys)

import nltk

for word in nltk.corpus.sinica_treebank.tagged_words():

    print(word[0], 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'小兔']]

# brown_tagged_sents = nltk.corpus.brown.tagged_sents(categories='news')

# unigram_tagger = nltk.UnigramTagger(brown_tagged_sents)

# sents = nltk.corpus.brown.sents(categories='news')

tags = unigram_tagger.tag(sents[0])

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[0])

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(B|A)=P(A|B)P(B)/P(A)。已知P(A|B)、P(A)、P(B),计算P(B|A)。贝叶斯分类器:

# 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)

print(nltk.classify.accuracy(classifier, test_set))

classifier.show_most_informative_features(5)

词性标注,上下文语境文本分类。句子分割,标点符号分类,选取单独句子标识符合并链表、数据特征。识别对话行为,问候、问题、回答、断言、说明。识别文字蕴含,句子能否得出另一句子结论,真假标签。

参考资料:

http://www.shareditor.com/blogshow?blogId=67

http://www.shareditor.com/blogshow?blogId=69

https://www.jianshu.com/p/6e5ace051c1e

《Python 自然语言处理》

欢迎推荐上海机器学习工作机会,我的微信:qingxingfengzi

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 学习笔记TF060:图像语音结合,看图说话

    实现人工智能3要素:语法(syntax)、语义(semantics)、推理(inference)。语言、视觉。通过语法(语言语法解析、视觉三维结构解析)和语义(...

    利炳根
  • 学习笔记CB001:NLTK库、语料库、词概率、双连词、词典

    聊天机器人知识主要是自然语言处理。包括语言分析和理解、语言生成、机器学习、人机对话、信息检索、信息传输与信息存储、文本分类、自动文摘、数学方法、语言资源、系统评...

    利炳根
  • 学习笔记CB009:人工神经网络模型、手写数字识别、多层卷积网络、词向量、word2vec

    由n个输入特征得出与输入特征几乎相同的n个结果,训练隐藏层得到意想不到信息。信息检索领域,模型训练合理排序模型,输入特征,文档质量、文档点击历史、文档前链数目、...

    利炳根
  • windows环境下搭建python+nltk开发环境

    nltk(Natural Language Tookit)实际上是python的一个开发包。对于自然语言处理任务非常有用。 ==================...

    NateHuang
  • 安装和使用NLTK分词和去停词

    安装NLTK可能出现的问题: 1. pip install ntlk 2. 如果遇到缺少stopwords报错如下:(http://johnlaudun.org...

    MachineLP
  • 初学者|不能不会的NLTK

    本文简绍了NLTK的使用方法,这是一个被称为“使用Python进行计算语言学教学和工作的绝佳工具”。

    yuquanle
  • python进行词性分析

    表示python的nltk包真的很好用,本来想着自己从字典里面抓数据的,后来师兄建议用nltk包,

    py3study
  • Python网络数据采集之处理自然语言|第07天

    在之前我们了解了如何把文本内容分解成 n-gram 模型,或者说是n个单词长度的词组。从最基本的功能上说,这个集合可以用来确定这段文字中最常用的单词和短语。另外...

    你好我是森林
  • 国内外免费地图SDK都在这了,开发APP再也不怕找不到路了

    如今、地图导航作为移动端重要商业入口,可以说把持着APP的“命脉”所在。所以,一款高效稳定的地图SDK对于移动开发者来说尤为重要。下面,BestSDK将为您分析...

    BestSDK
  • [译] 理解 LSTM 网络

    用户1107453

扫码关注云+社区

领取腾讯云代金券