在anaconda中使用NLTK,【自然语言】jieba进行分词并统计频率最高的50个高频词语

一、任务目标:

在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。 

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值