import jieba def get_txt(): txt = open(r"E:\TXT\threekingdoms.txt", "r", encoding="utf-8").read() return txt three_txt = get_txt() three_txt = jieba.lcut(three_txt) # print(three_txt) counts = {} for word in three_txt: if len(word) <= 1: continue if word == "诸葛亮" or word == "孔明曰": rword = "孔明" elif word == "关公" or word == "云长": rword = "关羽" elif word == "玄德" or word == "玄德曰": rword = "刘备" elif word == "孟德" or word == "丞相": rword = "曹操" elif word == "周瑜" or word == "都督": rword = "周瑜" else: rword = word counts[rword] = counts.get(rword, 0) + 1 # 统计词频并在字典中创建键值对 # print(counts) items = list(counts.items()) # 将无序的字典类型转换为可排序的列表类型 items.sort(key=lambda x: x[1], reverse=True) # 以元素的第二列进行从大到小排序 # print(items) for i in range(10): word, count = items[i] print("{:<5}:{:>5}".format(word, count)) # 格式化输出排序结果

时间: 2023-05-23 12:06:03 浏览: 63
这段代码首先通过导入`jieba`模块来分词。然后定义了一个函数`get_txt()`,该函数用于打开指定路径下的一个以`utf-8`编码的文本文件,并将文件内容读入到一个变量`txt`中,最后将`txt`变量返回。接着,调用该函数将文本文件中的内容读取并存储到变量`three_txt`中。最后,用`jieba.lcut()`方法对`three_txt`进行分词处理,并将处理结果再次存储到`three_txt`变量中。
相关问题

import jieba def word_extract(): # 读取文件 corpus = [] path = 'D:/自然语言处理/第2章/data/金庸-白马啸西风.txt' content = '' for line in open(path, 'r', encoding='gbk', errors='ignore'): line = line.strip() content += line corpus.append(content) # 加载停用词 stop_words = [] path = 'D:/自然语言处理/第4章/data/stopword.txt' for line in open(path, encoding='utf8'): line = line.strip() stop_words.append(line) # jieba分词 split_words = [] word_list = jieba.cut(corpus[0]) for word in word_list: if word not in stop_words: split_words.append(word)这段代码哪里有问题

这段代码的缩进有问题,导致程序运行时会报错。具体来说,for循环和if语句的缩进应该向右移动一个制表符或四个空格,如下所示: ``` import jieba def word_extract(): # 读取文件 corpus = [] path = 'D:/自然语言处理/第2章/data/金庸-白马啸西风.txt' content = '' for line in open(path, 'r', encoding='gbk', errors='ignore'): line = line.strip() content += line corpus.append(content) # 加载停用词 stop_words = [] path = 'D:/自然语言处理/第4章/data/stopword.txt' for line in open(path, encoding='utf8'): line = line.strip() stop_words.append(line) # jieba分词 split_words = [] word_list = jieba.cut(corpus[0]) for word in word_list: if word not in stop_words: split_words.append(word) return split_words ```

from transformers import pipeline, BertTokenizer, BertModel import numpy as np import torch import jieba tokenizer = BertTokenizer.from_pretrained('bert-base-chinese') model = BertModel.from_pretrained('bert-base-chinese') ner_pipeline = pipeline('ner', model='bert-base-chinese') with open('output/weibo1.txt', 'r', encoding='utf-8') as f: data = f.readlines() def cosine_similarity(v1, v2): return np.dot(v1, v2) / (np.linalg.norm(v1) * np.linalg.norm(v2)) def get_word_embedding(word): input_ids = tokenizer.encode(word, add_special_tokens=True) inputs = torch.tensor([input_ids]) outputs = model(inputs)[0][0][1:-1] word_embedding = np.mean(outputs.detach().numpy(), axis=0) return word_embedding def get_privacy_word(seed_word, data): privacy_word_list = [] seed_words = jieba.lcut(seed_word) jieba.load_userdict('data/userdict.txt') for line in data: words = jieba.lcut(line.strip()) ner_results = ner_pipeline(''.join(words)) for seed_word in seed_words: seed_word_embedding = get_word_embedding(seed_word) for ner_result in ner_results: if ner_result['word'] == seed_word and ner_result['entity'] == 'O': continue if ner_result['entity'] != seed_word: continue word = ner_result['word'] if len(word) < 3: continue word_embedding = get_word_embedding(word) similarity = cosine_similarity(seed_word_embedding, word_embedding) print(similarity, word) if similarity >= 0.6: privacy_word_list.append(word) privacy_word_set = set(privacy_word_list) return privacy_word_set 上述代码运行之后,结果为空集合,哪里出问题了,帮我修改一下

根据你提供的代码,可以看到 `get_privacy_word` 函数中,`seed_word` 是一个参数,但是在函数中使用了变量名 `seed_words`,这可能导致部分问题。在 `for seed_word in seed_words:` 中,`seed_word` 的值会被循环遍历覆盖,可能导致程序出现问题。此外,代码中使用了 `jieba.load_userdict` 来加载用户自定义词典,但是并没有提供该词典的内容,因此也可能导致程序无法正确识别词汇。 下面是修改后的代码: ```python from transformers import pipeline, BertTokenizer, BertModel import numpy as np import torch import jieba tokenizer = BertTokenizer.from_pretrained('bert-base-chinese') model = BertModel.from_pretrained('bert-base-chinese') ner_pipeline = pipeline('ner', model='bert-base-chinese') with open('output/weibo1.txt', 'r', encoding='utf-8') as f: data = f.readlines() def cosine_similarity(v1, v2): return np.dot(v1, v2) / (np.linalg.norm(v1) * np.linalg.norm(v2)) def get_word_embedding(word): input_ids = tokenizer.encode(word, add_special_tokens=True) inputs = torch.tensor([input_ids]) outputs = model(inputs)[0][0][1:-1] word_embedding = np.mean(outputs.detach().numpy(), axis=0) return word_embedding def get_privacy_word(seed_word, data): privacy_word_list = [] seed_words = jieba.lcut(seed_word) for line in data: words = jieba.lcut(line.strip()) ner_results = ner_pipeline(''.join(words)) for seed_word in seed_words: seed_word_embedding = get_word_embedding(seed_word) for ner_result in ner_results: if ner_result['word'] == seed_word and ner_result['entity'] == 'O': continue if ner_result['entity'] != seed_word: continue word = ner_result['word'] if len(word) < 3: continue word_embedding = get_word_embedding(word) similarity = cosine_similarity(seed_word_embedding, word_embedding) print(similarity, word) if similarity >= 0.6: privacy_word_list.append(word) privacy_word_set = set(privacy_word_list) return privacy_word_set get_privacy_word('隐私', data) ``` 在修改后的代码中,我将 `for seed_word in seed_words:` 中的变量名修改为了 `for s_word in seed_words:`,以避免变量名冲突。同时,我也提供了一个示例的数据文件,用于测试程序的运行结果。你可以将 `output/weibo1.txt` 替换为你自己的数据文件路径。

相关推荐

import sys import re import jieba import codecs import gensim import numpy as np import pandas as pd def segment(doc: str): stop_words = pd.read_csv('data/stopwords.txt', index_col=False, quoting=3, names=['stopword'], sep='\n', encoding='utf-8') stop_words = list(stop_words.stopword) reg_html = re.compile(r'<[^>]+>', re.S) # 去掉html标签数字等 doc = reg_html.sub('', doc) doc = re.sub('[0-9]', '', doc) doc = re.sub('\s', '', doc) word_list = list(jieba.cut(doc)) out_str = '' for word in word_list: if word not in stop_words: out_str += word out_str += ' ' segments = out_str.split(sep=' ') return segments def doc2vec(file_name, model): start_alpha = 0.01 infer_epoch = 1000 doc = segment(codecs.open(file_name, 'r', 'utf-8').read()) vector = model.docvecs[doc_id] return model.infer_vector(doc) # 计算两个向量余弦值 def similarity(a_vect, b_vect): dot_val = 0.0 a_norm = 0.0 b_norm = 0.0 cos = None for a, b in zip(a_vect, b_vect): dot_val += a * b a_norm += a ** 2 b_norm += b ** 2 if a_norm == 0.0 or b_norm == 0.0: cos = -1 else: cos = dot_val / ((a_norm * b_norm) ** 0.5) return cos def test_model(file1, file2): print('导入模型') model_path = 'tmp/zhwk_news.doc2vec' model = gensim.models.Doc2Vec.load(model_path) vect1 = doc2vec(file1, model) # 转成句子向量 vect2 = doc2vec(file2, model) print(sys.getsizeof(vect1)) # 查看变量占用空间大小 print(sys.getsizeof(vect2)) cos = similarity(vect1, vect2) print('相似度:%0.2f%%' % (cos * 100)) if __name__ == '__main__': file1 = 'data/corpus_test/t1.txt' file2 = 'data/corpus_test/t2.txt' test_model(file1, file2) 有什么问题 ,怎么解决

最新推荐

recommend-type

基于SSM+JSP的企业人事管理信息系统毕业设计(源码+录像+说明).rar

基于SSM+JSP的企业人事管理信息系统毕业设计(源码+录像+说明).rar 【项目技术】 开发语言:Java 框架:ssm+jsp 架构:B/S 数据库:mysql 【演示视频-编号:420】 https://pan.quark.cn/s/b3a97032fae7 【实现功能】 实现了员工基础数据的管理,考勤管理,福利管理,薪资管理,奖惩管理,考核管理,培训管理,招聘管理,公告管理,基础数据管理等功能。
recommend-type

node-v6.12.0-linux-ppc64le.tar.xz

Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

机器学习怎么将excel转为csv文件

机器学习是一种利用计算机算法和统计数据的方法来训练计算机来进行自动学习的科学,无法直接将excel文件转为csv文件。但是可以使用Python编程语言来读取Excel文件内容并将其保存为CSV文件。您可以使用Pandas库来读取Excel文件,并使用to_csv()函数将其保存为CSV格式。以下是代码示例: ```python import pandas as pd # 读取 Excel 文件 excel_data = pd.read_excel('example.xlsx') # 将数据保存为 CSV 文件 excel_data.to_csv('example.csv', index=
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。
recommend-type

"互动学习:行动中的多样性与论文攻读经历"

多样性她- 事实上SCI NCES你的时间表ECOLEDO C Tora SC和NCESPOUR l’Ingén学习互动,互动学习以行动为中心的强化学习学会互动,互动学习,以行动为中心的强化学习计算机科学博士论文于2021年9月28日在Villeneuve d'Asq公开支持马修·瑟林评审团主席法布里斯·勒菲弗尔阿维尼翁大学教授论文指导奥利维尔·皮耶昆谷歌研究教授:智囊团论文联合主任菲利普·普雷教授,大学。里尔/CRISTAL/因里亚报告员奥利维耶·西格德索邦大学报告员卢多维奇·德诺耶教授,Facebook /索邦大学审查员越南圣迈IMT Atlantic高级讲师邀请弗洛里安·斯特鲁布博士,Deepmind对于那些及时看到自己错误的人...3谢谢你首先,我要感谢我的两位博士生导师Olivier和Philippe。奥利维尔,"站在巨人的肩膀上"这句话对你来说完全有意义了。从科学上讲,你知道在这篇论文的(许多)错误中,你是我可以依
recommend-type

实现实时监控告警系统:Kafka与Grafana整合

![实现实时监控告警系统:Kafka与Grafana整合](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X2pwZy9BVldpY3ladXVDbEZpY1pLWmw2bUVaWXFUcEdLT1VDdkxRSmQxZXB5R1lxaWNlUjA2c0hFek5Qc3FyRktudFF1VDMxQVl3QTRXV2lhSWFRMEFRc0I1cW1ZOGcvNjQw?x-oss-process=image/format,png) # 1.1 Kafka集群架构 Kafka集群由多个称为代理的服务器组成,这
recommend-type

写出一个拉格朗日多项式插值程序,并调用该函数做图

好的,以下是一个使用拉格朗日多项式进行插值的 Python 代码: ``` import numpy as np import matplotlib.pyplot as plt def lagrangeInterpolation(x, y, x_interp): """ 使用拉格朗日多项式进行插值 x: 已知点的 x 坐标数组 y: 已知点的 y 坐标数组 x_interp: 插值点的 x 坐标数组 """ n = len(x) m = len(x_interp) L = np.zeros([n, m]) fo