赞
踩
NLP: Natural Language Processing 自然语言处理
统计自然语言处理运用了推测学、机率、统计的方法来解决上述,尤其是针对容易高度模糊的长串句子,当套用实际文法进行分析产生出成千上万笔可能性时所引发之难题。处理这些高度模糊句子所采用消歧的方法通常运用到语料库以及马可夫模型(Markov models)。统计自然语言处理的技术主要由同样自人工智能下与学习行为相关的子领域:机器学习及资料采掘所演进而成。
【1】文本相似度分析:从海量数据(文章,评论)中,把相似的数据挑选出来
【2】步骤:
把评论翻译成机器看的懂的语言
使用机器看的懂得算法轮询去比较每一条和所有评论的相似程度
把相似的评论挑出来
【3】分词
英语用NLTK,中文用jieba。
【3】去掉停用词
【4】把评论翻译成机器看的懂的语言
1、分词
2、制作词袋模型(bag-of-word)
3、用词袋模型制作语料库(corpus)
4、把评论变成词向量
1、支持三种分词模式:
- 精确模式:试图将句子最精确地切开,适合文本分析
- 全模式:把句子中所有的可以组成词的词语都扫描出来,速度非常快,但是不能解决歧义
- 搜索引擎模式:在精确模式的基础上,对长词再次进行切分,提高召回率,适合用于搜索引擎分词
2、支持繁体分词
3、支持自定义词典
4、MIT授权协议
jieba.cut
方法接受三个输入参数:需要分词的字符串;(cut_all 参数用来控制是否采用全模式HMM 参数用来控制是否使用HMM模型)jieba.cut_for_search
方法接受两个参数:需要分词的字符串;是否使用HMM模型。该方法适合用于搜索引擎构建倒排索引的分词,粒度比较细jieba.cut
和jieba.cut_for_search
返回的结构都是一个可迭代的generator(生成器),可以使用for循环来获得分词后得到的每一个单词(unicode),或者使用jieba.lcut
以及jieba.lcut_for_search
直接返回listjieba.Tokenizer(dictionary=DEFAULT_DICT)
新建自定义分词器,可用于同时使用不同词典。jieba.dt
为默认分词器,所有全局分词相关的函数都是该分词器的映射。『1』载入词典
jieba.load_userdict(file_name )
##file_name为文件对象或自定义词典的路径『2』调整词典
使用 add_word(word, freq=None, tag=None) 和 del_word(word) 可在程序中动态修改词典。
使用 suggest_freq(segment, tune=True) 可调节单个词语的词频,使其能(或不能)被分出来。
注意:自动计算的词频在使用 HMM 新词发现功能时可能无效。
import jieba text ="我来到西安邮电大学" #全模式 seg_list =jieba.cut(text,cut_all=True) print("全模式:","/".join(seg_list)) #精确模式 seg_list1 =jieba.cut(text,cut_all=False) print("精确模式","/".join(seg_list1)) #搜索引擎模式 seg_list2 =jieba.cut_for_search(text) print("搜索引擎模式","/".join(seg_list2)) """ 添加自定义词语""" jieba.load_userdict('mydict') seg_list =jieba.cut(text,cut_all=True) print("全模式:","/".join(seg_list)) #精确模式 seg_list1 =jieba.cut(text,cut_all=False) print("精确模式","/".join(seg_list1)) #搜索引擎模式 seg_list2 =jieba.cut_for_search(text) print("搜索引擎模式","/".join(seg_list2))
【1】基于TF-IDF算法的关键词提取
import jieba.analyse
jieba.analyse.extract_tags(sentence,topK=20,withWeight=Flase,allowPOS=())
- sentence 为待提取的文本
- topK 为返回几个TF-IDF权重最大的关键字,默认值为20
- withWeight 为是否一并返回关键字权重值,默认值为Flase
- allowPOS 仅包括指定词形的词,默认为空,即不筛选
jieba.analyse.TFIDF(idf_path =None)
新建TFIDF实例,id_path为IDF频率文件
import jieba import jieba.analyse jieba.load_userdict('mydict') text = "故宫的著名景点包括乾清宫、太和殿和午门等。其中乾清宫非常精美,午门是紫禁城的正门,午门居中向阳。" sed_list = jieba.cut(text,cut_all=False) #获取关键字 tags =jieba.analyse.extract_tags(text,topK=5) print("关键字:") print(" ".join(tags)) #除去停用字 stopwords =['的','包括', '等', '是'] final='' for seg in sed_list: if seg not in stopwords: final +=seg print(final)
【1】概念
TF-IDF(term frequency–inverse document frequency)是一种用于资讯检索与资讯探勘的常用加权技术。TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。TF-IDF加权的各种形式常被搜寻引擎应用,作为文件与用户查询之间相关程度的度量或评级。除了TF-IDF以外,因特网上的搜寻引擎还会使用基于连结分析的评级方法,以确定文件在搜寻结果中出现的顺序。
【2】原理
在一份给定的文件里,词频 (term frequency, TF)
指的是某一个给定的词语在该文件中出现的次数。这个数字通常会被归一化(分子一般小于分母 区别于IDF),以防止它偏向长的文件。(同一个词语在长文件里可能会比短文件有更高的词频,而不管该词语重要与否。)
逆向文件频率 (inverse document frequency, IDF)
是一个词语普遍重要性的度量。某一特定词语的IDF,可以由总文件数目除以包含该词语之文件的数目,再将得到的商取对数得到。
某一特定文件内的高词语频率,以及该词语在整个文件集合中的低文件频率,可以产生出高权重的TF-IDF。因此,TF-IDF倾向于过滤掉常见的词语,保留重要的词语。
TFIDF的主要思想是:如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。TFIDF实际上是:TF * IDF,TF词频(Term Frequency),IDF反文档频率(Inverse Document Frequency)
。TF表示词条在文档d中出现的频率(另一说:TF词频(Term Frequency)指的是某一个给定的词语在该文件中出现的次数)。IDF的主要思想是:如果包含词条t的文档越少,也就是n越小,IDF越大,则说明词条t具有很好的类别区分能力。如果某一类文档C中包含词条t的文档数为m,而其它类包含t的文档总数为k,显然所有包含t的文档数n=m+k,当m大的时候,n也大,按照IDF公式得到的IDF的值会小,就说明该词条t类别区分能力不强。(另一说:IDF反文档频率(Inverse Document Frequency)是指果包含词条的文档越少,IDF越大,则说明词条具有很好的类别区分能力。)但是实际上,如果一个词条在一个类的文档中频繁出现,则说明该词条能够很好代表这个类的文本的特征,这样的词条应该给它们赋予较高的权重,并选来作为该类文本的特征词以区别与其它类文档。这就是IDF的不足之处.
在一份给定的文件里,词频(term frequency,TF)指的是某一个给定的词语在该文件中出现的频率。这个数字是对词数(term count)的归一化,以防止它偏向长的文件。(同一个词语在长文件里可能会比短文件有更高的词数,而不管该词语重要与否。)对于在某一特定文件里的词语 来说,它的重要性可表示为:
Stary 2017-07-18 at 4.13.35 P
Stary 2017-07-18 at 4.13.28 P
某一特定文件内的高词语频率,以及该词语在整个文件集合中的低文件频率,可以产生出高权重的TF-IDF。因此,TF-IDF倾向于过滤掉常见的词语,保留重要的词语。
【3】
‘
"""sensitive_analysis情感分析""" #基于ChnSentiCorp_htl_all.csv文件内容进行分析 import jieba from gensim import corpora import csv from sklearn.linear_model import LogisticRegression all_doc_list =[] label_list =[] with open("../dataSet/ChnSentiCorp_htl_all.csv","r",encoding="UTF-8") as f: reader = csv.reader(f) for row in reader: label =row[0] comment =list(jieba.cut(row[1],cut_all=False)) label_list.append(label) all_doc_list.append(list(comment)) # print(all_doc_list) """ 制作语料库 """ # 制作词袋(bag-of-words) dictionary = corpora.Dictionary(all_doc_list) # print(dictionary.keys()) # print(dictionary.token2id) # 制作语料库 corpus = [dictionary.doc2bow(doc) for doc in all_doc_list] # print(corpus) doc_vec = [] # 把文字向量化 for doc in all_doc_list: doc_test_vec = dictionary.doc2bow(doc) list = [0 for x in range(len(dictionary.keys()))] for dic in doc_test_vec: list[dic[0]] += dic[1] doc_vec.append(list) print(doc_vec) log_reg = LogisticRegression(multi_class='ovr', solver='sag') log_reg.fit(doc_vec, label_list) print("w1", log_reg.coef_) print("w0", log_reg.intercept_) # Predict test = "不错,在同等档次酒店中应该是值得推荐的!" test_list = [word for word in jieba.cut(test)] test_vec = dictionary.doc2bow(test_list) test_list = [0 for x in range(len(dictionary.keys()))] for doc in test_vec: test_list[dic[0]] += dic[1] pred_list = [] pred_list.append(test_list) # 用来预测分类的概率值,比如第一个行第一个概率最大,那么得到的y=0 y_proba = log_reg.predict_proba(pred_list) # 用来预测分类号的 y_hat = log_reg.predict(pred_list) print(y_proba) print(y_hat)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。