到本书配套的官方网站的“下载专区”的“数据集/第 15章 常用的标准库和第三方库”目录下把文件 threekingdoms.txt 下载到本地
KeyError: '2人'
键名错误!
您的代码第25行:del counts[word]
当遍历到“2人”时为:del counts['2人']
字典中没有“2人”这个key,引发 KeyError 。在 del counts['2人'] 前, print(counts) ,看看是不是真没有“2人”。
构建同义词文件tongyici_tihuan.txt,每一个同义词列为一行,每行第一个为希望分隔后呈现的词语,后几个为第一个词的同义词,用tab键分隔,比如:
年休假 年假 年休
北京 北平 首都
在这个例子里“北平 首都”都会被替换为 “北京”
我可以解决该问题。
步骤:
1.安装jieba库
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple jieba
2.获取本地txt文件内容
def getText(filepath):
f = open(filepath, 'r', encoding = 'utf-8')
text = f.read()
f.close()
return text #返回文本内容
3.用jieba分词统计出现次数
import jieba
text = getText("path/to/threekingdoms.txt")
word_count_dic = {} # 关键字的出现次数统计
text_lst = jieba.lcut(text, cut_all=True) # 切割
new_text_lst = []
for content in text_lst:
if len(content) <= 1:
continue
word_count_dic[content] = word_count_dic.get(content, 0) + 1 # 写到统计
new_text_lst.append(content)
print(word_count_dic) # 输出统计结果
4.针对问题要求,对某些词汇进行同义词替换,则需要构建同义词文件txt,每个同义词列为一行,每行第一个为希望分隔后呈现的词语,后面几个为第一个词的同义词,用tab键分隔,比如:
关羽 关公 云长
张飞 张翼德 翼德
...
读取同义词文件:
def readTongyici(filepath):
f = open(filepath, 'r', encoding='UTF-8')
words = f.readlines()
f.close()
tongyicis = {}
for word in words:
w = word.strip().split("\t")
if len(w) < 2:
continue
# 以第一个词构建同义词的哈希表
for k in w[1:]:
tongyicis[k] = w[0]
return tongyicis
tongyici = readTongyici("path/to/tongyici.txt")
对分词结果进行同义词替换:
new_text_lst = [tongyici.get(x, x) for x in new_text_lst]
完整代码如下:
import jieba
# 获取本地txt文件内容
def getText(filepath):
f = open(filepath, 'r', encoding = 'utf-8')
text = f.read()
f.close()
return text #返回文本内容
# 读取同义词文件
def readTongyici(filepath):
f = open(filepath, 'r', encoding='UTF-8')
words = f.readlines()
f.close()
tongyicis = {}
for word in words:
w = word.strip().split("\t")
if len(w) < 2:
continue
# 以第一个词构建同义词的哈希表
for k in w[1:]:
tongyicis[k] = w[0]
return tongyicis
text = getText("path/to/threekingdoms.txt")
tongyici = readTongyici("path/to/tongyici.txt")
word_count_dic = {} # 关键字的出现次数统计
text_lst = jieba.lcut(text, cut_all=True) # 切割
new_text_lst = []
for content in text_lst:
if len(content) <= 1:
continue
word_count_dic[content] = word_count_dic.get(content, 0) + 1 # 写到统计
new_text_lst.append(content)
# 对分词结果进行同义词替换
new_text_lst = [tongyici.get(x, x) for x in new_text_lst]
print(word_count_dic) # 输出统计结果