Chinaunix首页 | 论坛 | 博客
  • 博客访问: 179945
  • 博文数量: 61
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 725
  • 用 户 组: 普通用户
  • 注册时间: 2017-05-13 22:10
文章分类
文章存档

2018年(8)

2017年(53)

我的朋友

分类: 大数据

2018-02-13 13:23:51

英文词干提取器,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切词,,自定义语料中文切词,自动词性标注。


词性自动标注。默认标注器 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

《Python 自然语言处理》


欢迎推荐上海机器学习工作机会,我的微信:qingxingfengzi
阅读(1198) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~