一、参考资料
新闻关键字提取和新闻推荐_mawenqi0729的博客-CSDN博客_新闻关键词抽取
jieba 分词的三种模式_天主极乐大帝的博客-CSDN博客
二、使用jieba进行分类
1、结巴分词的三种模式
精确模式(默认)、全模式和搜索引擎模式
1)精确模式,试图将句子精确的分开,适用于文本分析。cut_all参数默认为False,所有使用cut方法时默认为精确模式。
import jieba strings = '今天天气真好' seg = jieba.cut(strings,cut_all=False) print(','.join(seg)) output : 今天天气,真,好
2)全模式,把句子中所有可以成词的词语都扫描出来,速度非常快,但是不能解决歧义。cut_all参数为True。
import jieba strings = '今天天气真好' seg = jieba.cut(strings,cut_all=True) print(','.join(seg)) output : 今天,今天天气,天天,天气,真好
3)搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适用于搜索引擎分词。调用jieba.cut_for_search(值)方法。
import jieba strings = '今天天气真好' seg = jieba.cut_for_search(strings) print(','.join(seg)) output : 今天,天天,天气,今天天气,真,好
三、关键字提取
1、经过查阅资料发现提取文章中的关键词需要考虑两点
-
词本身(词长0.1,词性0.8,词频0.3)0.4
-
居间度0.6
tw = 0.4 # 词权重 vdw = 0.6 # 居间度权重 lenw = 0.1 # 词长权重 posw = 0.8 # 词性权重 tfw = 0.3 # tf词频权重
词长:词的长度。
词性:词性是根据jieba分词判断的词性,给出一个该词性在一篇文章中一般来讲的重要程度,比如名词等词性相对来讲会更重要一些,而连词介词则是重要度为0的需要尽量剔除的词。
词频:该词在文章中出现的频率。
居间度:在将相似度矩阵抽象成图之下进行计算的,所以首先需要介绍一下相似度矩阵。如果将词汇进行两两对比,那么不是所有词的词义差距都是一样大的,比如做和干就是意思非常相近的两个词,而中国和吃饭则完全不是一个意思,那这么多词怎么得到它们之间的相似度呢,可以使用这份将词表示为编码的词表,在这份词表中代码越相近,他们的意思也就越相近。
2、形成相似度二维表
找到相对应的代码,计算相似度之后,形成相关对应的二维表,这个表并不全是0,1表示,为了大量简化计算,把所有相似度>0.5的设为1,<0.5的设为0,从而将词汇相似度的二维表抽象成为了一个由顶点和边的图,其中每个顶点都是文章中的一个词。
def similar_matrix(self, string_data): """ function: 构建语义相关度网络 :param string_data: 待分析的语句 :return: similar_matrix 语义相关度网络 """ word_tag_dict = self.word_tag_dictionary() keys = word_tag_dict.keys() candidate_words_dict, nwword = CandidateWords().get_candidate_list(string_data) nwword_words = nwword.values() #order words length = len(nwword_words) similar_matrix = numpy.zeros(shape=(length, length)) word_list = list() for word in nwword_words: if word in keys: word_list.append(word) for i in range(length): for j in range(length): if (nwword_words[i] in word_list) and (nwword_words[j] in word_list): similar_matrix[i][j] = self.similarity(i, j, nwword_words, word_tag_dict) else: similar_matrix[i][j] = 0.2 # self.draw_network(similar_matrix, nwword_words) return similar_matrix def similarity_network_edges(self, string_data): similar_matrix = self.similar_matrix(string_data) row_col = similar_matrix.shape for i in range(row_col[0]): for j in xrange(i+1, row_col[0]): if similar_matrix[i][j] > 0.5: self.E.append((i, j)) return self.E
四、运行截图