一、任务目标:
在anaconda中使用NLTK
python代码写通过下载的《天龙八部》语料构建武侠小说语料库,实现如下操作:
1.读取本地语料。
2. 查询词频。
3.查看《天龙八部》部分文本(4000~4010个词汇)。
4.统计频率最高的50个高频词语。
5. 查询词频在指定区间内词频在100~200的词汇的次数量。
6.使用jieba进行分词。
7. 查看指定单词“包不同”,“鸠摩智”的上下文(上下文长度为20个单词,显示5行)。
8.分别绘制“包不同”,“鸠摩智”词汇分布图。
jieba安装:https://blog.csdn.net/zywmac/article/details/137245898?spm=1001.2014.3001.5501
NLTK安装:https://blog.csdn.net/zywmac/article/details/136872046?spm=1001.2014.3001.5501
二、代码部分
import jieba
import matplotlib.pyplot as plt
from collections import Counter
# 1. 首先读取本地语料
#encoding='latin1'或者gbk(若UTF-8报错,可替换)
file_path = "/Users/zhengyawen/Downloads/zh/金庸-天龙八部.txt"
with open(file_path, "r", encoding="gbk") as f:
text = f.read()
# 2. 去除文章中的标点符号
text = ''.join(e for e in text if e.isalnum() or e.isspace())
# 3. 查询词频
word_freq = Counter(word for word in jieba.cut(text) if word != '\u3000' and word != '\n')
# 4. 查看《天龙八部》部分文本(4000~4010个词汇)
partial_text = "".join(word for word in jieba.cut(text))[4000:4010]
# 5. 统计频率最高的50个高频词语
top_50_words = word_freq.most_common(50)
# 6. 查询词频在指定区间内词频在100~200的词汇的次数量
freq_100_200 = sum(1 for freq in word_freq.values() if 100 <= freq <= 200)
# 7. 使用jieba进行分词
cut_text = [word for word in jieba.lcut(text) if word != '\u3000' and word != '\n']
# 8. 查看指定单词“包不同”,“鸠摩智”的上下文(上下文长度为20个单词,显示5行)
#遍历文本中的每个单词,并检查是否与指定的单词匹配。
#如果匹配,则根据 window_size 获取该单词的上下文范围,并将上下文添加到 contexts列表中。
def find_context(word, text, window_size=20, lines=5):
contexts = []
for i, token in enumerate(text):
if token == word:
start = max(0, i - window_size)
end = min(len(text), i + window_size + 1)
context = text[start:end]
contexts.append(context)
if len(contexts) == lines:
break
return contexts
word1_contexts = find_context("包不同", cut_text)
word2_contexts = find_context("鸠摩智", cut_text)
# 9. 分别绘制“包不同”,“鸠摩智”词汇分布图
def plot_word_distribution(word, text):
freq = [i + 1 for i, token in enumerate(text) if token == word]
plt.hist(freq, bins=50, color='skyblue', edgecolor='black')
plt.title(f"指定单词-----'{word}'")
plt.xlabel("文章中位置分布")
plt.ylabel("出现频率")
plt.show()
plt.rcParams['font.sans-serif'] = ['Songti SC']#字体设置,Mac可用
plot_word_distribution("包不同", cut_text)
plot_word_distribution("鸠摩智", cut_text)
# 10. 打印结果
print("《天龙八部》部分文本(4000~4010个词汇):", partial_text)
print("\n频率最高的50个高频词语:", top_50_words)
print("\n词频在100~200的词汇的次数量:", freq_100_200)
print("\n'包不同'的上下文:")
for context in word1_contexts:
print(" ".join(context))
print("\n'鸠摩智'的上下文:")
for context in word2_contexts:
print(" ".join(context))
三、运行结果
自然语言学科内容,有帮助的话可以cv。