赞
踩
格式化数据:表格、json
非格式化数据:字符串、文本
1、中文分词
2、自定义词典、去停用词
3、词频统计、关键词抽取
4、案例:招聘需求关键词抽取
分词:就是将0维的非格式化文本转化为格式化、向量化数据
中文分词:将一个汉字序列切分成一个个单独的词
英文文档中,单词之间是以空格作为自然分界符的,而中文词没有一个形式上的分界符,虽然英文也同样存在短语的划分问题,不过在分词这一问题上,中文分词相比英文要复杂困难的多:
例如:
[0维的非格式化文本转为格式化]
分词后:
[’0维’ ‘的’ ‘非格式化’ ‘文本’ ‘转为’ ‘格式化’]
import numpy as np import pandas as pd import jieba import jieba.analyse # 1. 载入数据 with open('E:/text_analysis/data/test.txt', 'r', encoding='UTF-8') as f: a = f.read() # 2. 分词 print(a) # 我来到了网易杭研大厦,我是网易人! b = jieba.cut(a) print(list(b)) c = jieba.lcut(a) # 直接输出列表 print(c) # ['我', '来到', '了', '网易', '杭研', '大厦', ',', '我', '是', '网易', '人', '!'] # 3. 分词后的数据转回文本 d = ' '.join(c) print(d) # 4.保存分词后的文本为文本文件 with open('E:/text_analysis/data/test_cut.txt', 'w', encoding='UTF-8') as f: f.write(d)
一个词错误分为两个词,解决此问题
1、当句子中的某个词没有被识别分出时,可以指定自己自定义的词典,以便包含jieba词库里没有的词
2、词典文件的内容可以根据项目不断增加。查看初步分词,将分词不正确的词加入自定义词典然后重新再分,直到正确率达标。
3、虽然jieba有新词识别能力,但是自行添加新词可以保证更高的正确率
jieba.load_userdict(file_name) #file name 为文件类对象或自定义词典的路径
词典格式:
注:词频省略时使用自动计算也能保证分出该词的词频
import jieba.analyse
a = '李小福是创新办主任也是云计算专家'
print(jieba.lcut(a))
# ['李小福', '是', '创新', '办', '主任', '也', '是', '云', '计算', '专家']
# 运用自定义词典 (custom中写入云计算和创新办)
jieba.load_userdict('E:/text_analysis/data/custom.txt')
print(jieba.lcut(a))
# ['李小福', '是', '创新办', '主任', '也', '是', '云计算', '专家']
使用更灵活: 一个词错误分为两个词/两个词错误分为一个词
import numpy as np import pandas as pd import jieba import jieba.analyse # 动态增加或删除词典的词(更灵活,随用随加) a1 = '我们中出了一个叛徒' print(jieba.lcut(a1)) # ['我们', '中出', '了', '一个', '叛徒'] # 删除词典的词 jieba.del_word('中出') print(jieba.lcut(a1)) # ['我们', '中', '出', '了', '一个', '叛徒'] # 添加 jieba.add_word('出了') print(jieba.lcut(a1)) # ['我们', '中', '出了', '一个', '叛徒'] # 还原 jieba.add_word('中出') jieba.del_word('出了') # 调节词的词频,使其能(或不能)被分出 # tune = True:执行词频调整,默认False不执行 jieba.suggest_freq(('中', '出'), tune=True) print(jieba.lcut(a1)) # ['我们', '中', '出', '了', '一个', '叛徒'] jieba.suggest_freq('一个叛徒', tune=True) print(jieba.lcut(a1)) # ['我们', '中', '出', '了', '一个叛徒'] # 还原 jieba.suggest_freq('中出', tune=True) jieba.suggest_freq(('一个', '叛徒'), tune=True) print(jieba.lcut(a1)) # ['我们', '中出', '了', '一个', '叛徒']
分词后,将不想出现在分词结果内的词删除
注意:修改自定义词典或停用词文本文件时,不要使用记事本修改(保存时会存为UTF-8带BOM格式,导致程序载入出问题)
# 去停用词
# 当一个字符串不是词,jieba误将其分为词,或者我们不想将某些不重要的词分出来(想删掉某些分出的词)可以自定义停用词词典
# 停用词就是要从分词结果删掉的垃圾无用词
# 词典中的词不会出现在分词结果中
# 停用词词典的内容可以根据项目不断增加
import numpy as np import pandas as pd import jieba import jieba.analyse a2 = '哎,额,听说你超级喜欢小游戏的!你是吗?' b = jieba.lcut(a2) print(b) # 停用词表: ''' 哎 , 你 是 吗 ! ? \n ''' stopword = [] with open('E:/text_analysis/data/stopword.txt', 'r', encoding='UTF-8') as f: for line in f.readline(): l = line.strip() if l == '\\n': l = '\n' if l == '\\u3000': l = '\u3000' stopword.append(l) # print(stopword) stopword = ['哎', ',', '你', '是', '吗', '!', '?', '\n'] x = np.array(b) y = np.array(stopword) print(np.in1d(x, y)) # x中有y吗? # [ True True False True False True False False False False False True True True False] print(~np.in1d(x, y)) # 取反 # [False False True False True False True True True True True False False False True] z = x[~np.in1d(x, y)] print(z) # ['额' '听说' '超级' '喜欢' '小游戏' '的' '!' '?'] # 去掉一个字以下的词 # 法1 k = [] for i in z: print(len(i)) if len(i) > 1: k.append(i) print(k) # ['听说', '超级', '喜欢', '小游戏'] # 法2 k1 = [i for i in z if len(i) > 1] print(k1) # ['听说', '超级', '喜欢', '小游戏']
抽取文档关键词用于在一篇文章中获取其核心内容(描述了什么?)又叫生成摘要、打标签、关键词提取等
import numpy as np import pandas as pd import jieba import jieba.analyse a = '哎,额,听说你超级喜欢小游戏的!你是吗?' b = jieba.lcut(a) print(b) # ['哎', ',', '额', ',', '听说', '你', '超级', '喜欢', '小游戏', '的', '!', '你', '是', '吗', '?'] # 统计词频 pd.DataFrame(b) # ascending=False降序 c = pd.DataFrame(b).groupby(0).size().sort_values(ascending=False)[:5] print(c) ''' 0 , 2 你 2 ? 1 ! 1 额 1 dtype: int64 '''
大概步骤如下:
载入文本
载入自定义词典
分词
去停用词和一个字的词
计算词频排序(输出前20个)
保存结果
jieba.analyse.extract_tags(txt)
词性分析:
jieba.posseg.cut()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。