gpt4 book ai didi

python - 使用 python 中的 for 循环迭代列表中列表中的标记 (SpaCy)

转载 作者:行者123 更新时间:2023-12-01 08:55:28 26 4
gpt4 key购买 nike

我相对较新,所以我可能会犯一些非常基本的错误,但根据我的理解,您将在 python 中的列表中的列表中迭代 token ,如下所示:

for each_list in full_list:
for each_token in each_list:
do whatever you wannna do

但是,当使用 SpaCy 时,第一个 for 循环似乎是在迭代 token 而不是列表。

所以代码:

for eachlist in alice:
if len(eachlist) > 5:
print eachlist

(其中 alice 是列表的列表,每个列表都是包含标记化单词的句子)

实际上打印每个超过 5 个字母的单词,而不是打印每个超过 5 个单词的句子(如果它真的在“第一级”for 循环中,它应该这样做。

代码:

newalice = []
for eachlist in alice:
for eachword in eachlist:
#make a new list of lists where each list contains only words that are classified as nouns, adjectives, or verbs (with a few more specific stipulations)
if (eachword.pos_ == 'NOUN' or eachword.pos_ == 'VERB' or eachword.pos_ == 'ADJ') and (eachword.dep_ != 'aux') and (eachword.dep_ != 'conj'):
newalice.append([eachword])

返回错误:“TypeError:'spacy.tokens.token.Token'对象不可迭代。”

我想在嵌套 for 循环中执行此操作的原因是我希望 newalice 成为列表的列表(我仍然希望能够迭代句子,我只是想摆脱我不知道的单词不在乎)。

我不知道我的代码中是否犯了一些非常基本的错误,或者 SpaCy 是否做了一些奇怪的事情,但无论哪种方式,我都非常感谢有关如何迭代列表中的项目的任何帮助SpaCy 中的 -a-list,同时保持原始列表的完整性。

最佳答案

下面是迭代嵌套列表元素的代码:

list_inst = [ ["this", " ", "is", " ", "a", " ", "sentence"], ["another", " ", "one"]]
for sentence in list_inst:
for token in sentence:
print(token, end="")
print("")

我认为你的误解来自于这样一个事实:spacy中的每个句子不是存储在列表中而是存储在doc对象中。 doc 对象是可迭代的,并且包含标记以及一些额外的信息。

示例代码:

# iterate to sentences after spacy preprocessing
import spacy
nlp = spacy.load('en_core_web_sm')
doc1 = nlp("this is a sentence")
doc2 = nlp("another one")
list_inst = [doc1, doc2]
for doc in list_inst:
for token in doc:
print(token, end=" ")
print("")

输出是相同的。

希望对你有帮助!

关于python - 使用 python 中的 for 循环迭代列表中列表中的标记 (SpaCy),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52799113/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com