gpt4 book ai didi

python - 如果单词小于 X,则在列表理解中进行词形还原

转载 作者:行者123 更新时间:2023-12-01 00:08:39 24 4
gpt4 key购买 nike

我有以下函数,它接收单词标记列表,以 WordNet 可读的格式收集词性标记,并使用它来对每个标记进行词形还原 - 我将其应用于单词标记列表列表:

from nltk import pos_tag
from nltk.stem import WordNetLemmatizer
from nltk.corpus import wordnet as wn

def getWordNetPOS (POStag):
def is_noun(POStag):
return POStag in ['NN', 'NNS', 'NNP', 'NNPS']
def is_verb(POStag):
return POStag in ['VB', 'VBD', 'VBG', 'VBN', 'VBP', 'VBZ']
def is_adverb(POStag):
return POStag in ['RB', 'RBR', 'RBS']
def is_adjective(POStag):
return POStag in ['JJ', 'JJR', 'JJS']

if is_noun(POStag):
return wn.NOUN
elif is_verb(POStag):
return wn.VERB
elif is_adverb(POStag):
return wn.ADV
elif is_adjective(POStag):
return wn.ADJ
else:
# if not noun, verb, adverb or adjective, return noun
return wn.NOUN

# lemmatize word tokens
def lemmas (wordtokens):
lemmatizer = WordNetLemmatizer()
POStag = pos_tag(wordtokens)
wordtokens = [lemmatizer.lemmatize(token[0], getWordNetPOS(token[1]))
for token in POStag]

return wordtokens

lemmatizedList = []
mylist = [['this','is','my','first','sublist'],['this','is','my','second','sublist']]

for ls in mylist:
x = lemmas(ls)
lemmatizedList.append(x)

我想找到一种方法将词形还原限制为设定长度(即 2)的标记,但最重要的是我还想保留小于此阈值的任何单词的原始形式。我得到的最接近的是将 if len(token[0])>2 添加到 lemmas 内的 wordtokens 列表理解的末尾> 函数,但这仅返回词形还原后的标记。同样,我尝试在 if 语句之后添加类似于 else token for token in POStag 的内容,但出现语法错误。为了清楚起见,这就是我的意思:

wordtokens = [lemmatizer.lemmatize(token[0], getWordNetPOS(token[1]))
for token in POStag if len(token[0])>2
else token for token in POStag]

我希望这是一个简单的错误,并且是我的一点Python盲点。

最佳答案

这实际上只是一个“盲点”。

您必须稍微重构列表理解和条件:

wordtokens = [lemmatizer.lemmatize(token[0], getWordNetPOS(token[1])) if len(token[0]) > 2 else token
for token in POStag]
<小时/>

说明:

列表推导式必须保留所有标记,因此您不想使用 if 添加条件。

wordtokens = [<tokenoperation> for token in POStag]

现在,您想要根据 token 长度更改操作,因此只需更改 tokenoperation 部分,使其仅修改 token :

lemmatizer.lemmatize(token[0], getWordNetPOS(token[1])) if len(token[0]) > 2 else token

您还可以添加一些像这样的括号,以使其更清晰:

wordtokens = [
(
lemmatizer.lemmatize(token[0], getWordNetPOS(token[1]))
if len(token[0]) > 2
else token
)
for token in POStag
]

一些文档/示例:请参阅此 realpython.com 上的“使用条件逻辑”部分。页。

关于python - 如果单词小于 X,则在列表理解中进行词形还原,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59787625/

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