roro0209 发表于 2023-5-7 19:08:15

分析红楼梦前80和后40回的形容词副词,并确定相同的10个词

于两个红楼梦文本集(前80、后40)的虚词词性(形容词、副词)进行TF-IDF关键词提取,并确定10个相同关键词。为什么我的代码出不来结果求大佬分析
import jieba.analyse
from collections import Counter

# 读取红楼梦文本
with open(r'C:\Users\自然语言处理\80.txt', 'r', encoding='utf-8') as f:
    hlm_text = f.read()

# 使用jieba分词器提取关键词
jieba.analyse.set_stop_words(r'C:\Users\自然语言处理\stopword.txt')
tags = jieba.analyse.extract_tags(hlm_text, topK=1000, withWeight=True, allowPOS=('a', 'd'))

# 将关键词按tf-idf值从大到小排列
tags_sorted = sorted(tags, key=lambda x: x, reverse=True)

# 提取形容词和副词关键词
adj_adv_tags = .__contains__('a') or tag.__contains__('d')]

# 获取前10个TF-IDF值最高的关键词
top_10_adj_adv = for tag in adj_adv_tags[:10]]

# 输出结果
print(top_10_adj_adv)

roro0209 发表于 2023-5-7 19:10:08

是我没指定文本集吗?

isdkz 发表于 2023-5-7 19:10:32

本帖最后由 isdkz 于 2023-5-7 19:11 编辑

根据您提供的代码,我发现了一些问题。以下是修改后的代码:

import jieba
import jieba.analyse
from collections import Counter

# 读取红楼梦文本
with open(r'C:\Users\自然语言处理\80.txt', 'r', encoding='utf-8') as f:
    hlm_text = f.read()

# 设置停用词
jieba.analyse.set_stop_words(r'C:\Users\自然语言处理\stopword.txt')

# 使用jieba分词器提取关键词
tags = jieba.analyse.extract_tags(hlm_text, topK=1000, withWeight=True, allowPOS=('a', 'd'))

# 将关键词按tf-idf值从大到小排列
tags_sorted = sorted(tags, key=lambda x: x, reverse=True)

# 提取形容词和副词关键词
adj_adv_tags = or 'd' in tag]

# 获取前10个TF-IDF值最高的关键词
top_10_adj_adv = for tag in adj_adv_tags[:10]]

# 输出结果
print(top_10_adj_adv)


在原始代码中, tag.__contains__('a')和tag.__contains__('d')部分可能会导致错误。在修改后的代码中,我们使用了if 'a' in tag or 'd' in tag来替换原来的代码,以提取形容词和副词关键词。

然而,请注意,这种方法可能会导致一些非形容词和副词的词汇被误认为是形容词和副词,因为它仅检查词中是否包含 'a' 或 'd',而不是词性。所以这个方法并不是十分准确。

为了得到更准确的结果,您应该使用词性标注功能,如jieba.posseg 。这将帮助您准确识别形容词和副词。以下是修改后的代码:

import jieba
import jieba.analyse
import jieba.posseg as pseg
from collections import Counter

# 读取红楼梦文本
with open(r'C:\Users\自然语言处理\80.txt', 'r', encoding='utf-8') as f:
    hlm_text = f.read()

# 设置停用词
jieba.analyse.set_stop_words(r'C:\Users\自然语言处理\stopword.txt')

# 使用jieba分词器提取关键词
tags = jieba.analyse.extract_tags(hlm_text, topK=1000, withWeight=True)

# 使用词性标注功能
word_flag = ) for tag in tags]
word_flag = for word in word_flag]

# 将关键词按tf-idf值从大到小排列
tags_sorted = sorted(zip(word_flag, tags), key=lambda x: x, reverse=True)

# 提取形容词和副词关键词
adj_adv_tags = .flag == 'a' or tag.flag == 'd']

# 获取前10个TF-IDF值最高的关键词
top_10_adj_adv = .word for tag in adj_adv_tags[:10]]

# 输出结果
print(top_10_adj_adv)


上面的代码使用了jieba.posseg模块来对提取出的关键词进行词性标注。然后,我们根据词性 ('a'表示形容词,'d'表示副词) 进行筛选,并输出前10个TF-IDF值最高的形容词和副词关键词。

您可以将这段代码应用于红楼梦前80回和后40回的文本,以找到两个文本集中共有的10个关键词。在这个过程中,请确保您分别加载了前80回和后40回的文本,并在两次分析中使用相同的停用词列表。

歌者文明清理员 发表于 2023-5-7 19:11:12

isdkz 发表于 2023-5-7 19:10
根据您提供的代码,我发现了一些问题。以下是修改后的代码:




说了一半,然后没了{:10_257:}

isdkz 发表于 2023-5-7 19:12:14

歌者文明清理员 发表于 2023-5-7 19:11
说了一半,然后没了

后面去接下一半了

roro0209 发表于 2023-5-7 19:18:22

isdkz 发表于 2023-5-7 19:10
根据您提供的代码,我发现了一些问题。以下是修改后的代码:




我复制代码后结果还是[],返回了个空集合,我原来的代码返回的也是空集合(;´д`)

roro0209 发表于 2023-5-7 19:48:55

isdkz 发表于 2023-5-7 19:10
根据您提供的代码,我发现了一些问题。以下是修改后的代码:




刚刚又试了出来结果了,谢谢大佬

白茶予 发表于 2023-5-8 10:47:01

roro0209 发表于 2023-5-7 19:10
是我没指定文本集吗?

厉害
页: [1]
查看完整版本: 分析红楼梦前80和后40回的形容词副词,并确定相同的10个词