赞
踩
在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。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。