在python环境下进行,编写出实验代码 第一次实验:分词与统计 任务1:针对CDIAL-BIAS-race数据集,使用结巴分词工具对文件进行分词,输出:分过词的文件。 任务2:统计数据中可能导致种族文化偏见的敏感词(race.txt)的词频。 第2次实验:分词与评价 任务1、利用Jieba对CDIAL-BIAS-race文件进行分词,并抽取词表。 任务2、利用上述词表,编写一个正向最大匹配分词程序。 任务3、编写一个评价程序,以结巴分词结果为标准答案,计算最大匹配分词结果的准确率、召回率、F测度。
时间: 2023-05-23 19:06:21 浏览: 453
第一次实验代码:
# 导入结巴分词库
import jieba
# 打开待分词文件
with open('CDIAL-BIAS-race.txt', 'r', encoding='utf-8') as f:
text = f.read()
# 使用结巴分词对文本进行分词
seg_list = jieba.cut(text)
# 将分词结果用空格连接成字符串
seg_text = ' '.join(seg_list)
# 将分词结果写入文件
with open('CDIAL-BIAS-race-seg.txt', 'w', encoding='utf-8') as f:
f.write(seg_text)
# 打开敏感词汇文件
with open('race.txt', 'r', encoding='utf-8') as f:
keywords = f.read().splitlines()
# 统计分词结果中的敏感词汇出现次数
freq_dict = {}
for word in seg_list:
if word in keywords:
if word in freq_dict:
freq_dict[word] += 1
else:
freq_dict[word] = 1
# 输出敏感词汇出现次数
for word in freq_dict:
print(word, freq_dict[word])
第二次实验代码:
# 导入结巴分词库
import jieba
# 打开待分词文件
with open('CDIAL-BIAS-race.txt', 'r', encoding='utf-8') as f:
text = f.read()
# 使用结巴分词对文本进行分词
seg_list = jieba.cut(text)
# 去重得到词表
word_set = set(seg_list)
# 将词表写入文件
with open('vocab.txt', 'w', encoding='utf-8') as f:
for word in word_set:
f.write(word + '\n')
# 读取词表
with open('vocab.txt', 'r', encoding='utf-8') as f:
vocab = [line.strip() for line in f.readlines()]
# 编写正向最大匹配分词程序
def forward_matching(text, vocab):
result = []
while text:
for i in range(len(text), 0, -1):
if text[:i] in vocab:
result.append(text[:i])
text = text[i:]
break
else:
result.append(text[0])
text = text[1:]
return result
# 对文本进行正向最大匹配分词
seg_list2 = forward_matching(text, vocab)
# 将分词结果用空格连接成字符串
seg_text = ' '.join(seg_list2)
# 将分词结果写入文件
with open('CDIAL-BIAS-race-seg2.txt', 'w', encoding='utf-8') as f:
f.write(seg_text)
# 导入评价库
from sklearn.metrics import precision_recall_fscore_support
# 转换分词结果为列表
seg_list = seg_text.split()
# 转换结巴分词结果为列表
with open('CDIAL-BIAS-race-seg.txt', 'r', encoding='utf-8') as f:
jieba_seg_list = f.read().split()
# 计算评价指标
precision, recall, f1_score, _ = precision_recall_fscore_support(jieba_seg_list, seg_list, average='macro')
# 输出评价结果
print('Precision:', precision)
print('Recall:', recall)
print('F1-score:', f1_score)
阅读全文