为了账号安全,请及时绑定邮箱和手机立即绑定

从重复的形容词中获取真值

从重复的形容词中获取真值

HUH函数 2022-04-27 13:29:18
我有一个包含不同文本的数组。其中一些有重复的形容词。现在我想从中创建一个数组,它包含真值,1 = 文本包含重复的形容词,0 = 文本不包含重复的形容词。这是我的文本示例:text = (['When someone who is extremely selfish dramatically wonders why people are so selfish !', 'I asked God to protect me from my enemies .. shortly after I started losing friends'])到目前为止,我尝试使用 wordnet 获取单词的类型from nltk.corpus import wordnet as wnmy_list = []for synset in list(wn.all_synsets('a')):    my_list.append(synset)my_listtruth_values = []for sentence in text:    for word in sentence:        if word in my_list:            truth_values.append(1)from nltk.corpus import wordnet as wn这段代码给了我以下错误:'str' object has no attribute '_name'对于重复的条件,我想像这样的计数器if counter >=1:    truth_value.append(1)
查看完整描述

2 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

我有一个解决方案给你,所以让我们来看看你的代码中存在的一些错误:


写作list(wn.all_synsets('a')将返回所有形容词的列表作为 Synset 对象,但你真正想要的是形容词名称的字符串。调用synset.name()以这种格式返回数据:acroscopic.a.01. 因为我们只想要它的第一部分(并且作为一个字符串),我们将改变


for synset in list(wn.all_synsets('a')):

    my_list.append(synset)


for synset in list(wn.all_synsets('a')):

    my_list.append(str(synset.name()).split(".")[0])

所以现在我们有了所有形容词的所需列表。现在,请注意该行


for word in sentence:

是解析句子中的单个字符而不是单词。我们想要的是


for word in sentence.split(" "):

综上所述,这就是我将如何解决这个问题:


truth_values = []

for sentence in text:

    adjectives = []

    for word in sentence.split(" "):

        if word in my_list:

            adjectives.append(word)

    truth_values.append(1 if any(adjectives.count(adj) > 1 for adj in adjectives) else 0)


查看完整回答
反对 回复 2022-04-27
?
LEATH

TA贡献1936条经验 获得超6个赞

如果你想得到所有的形容词,这可能会很棘手。最好的方法是使用语言解析器,例如 stanford 统计解析器。它将导致句子中每个单词的语法功能。你也可以使用 spacy。


import spacy


# Load English tokenizer, tagger, parser, NER and word vectors

nlp = spacy.load("en_core_web_sm")


# Process whole documents

text = ("When someone who is extremely selfish dramatically"

        "wonders why people are so selfish !")

doc = nlp(text)


# Analyze syntax

adj = [token.lemma_ for token in doc if token.pos_ == "ADJ"]

repeat = len(adj) != len(set(adj))

print("Adjectives:", adj)

print("Repeats?", repeat)

尝试使用以下句子来运行您的方法:“当您这么说时,我的意思不是您的意思”。它失败了,但是用这种其他方法它不会。原因是“平均”可以是形容词,但并非总是如此。


查看完整回答
反对 回复 2022-04-27
  • 2 回答
  • 0 关注
  • 103 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信