Python find words有特定的后缀

2024-10-03 11:13:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在处理中文NLP问题。 我发现这个词有特定的后缀。 例如,我有两个列表!你知道吗

suffixs = ['aaa','bbb','cc'.....]

words_list = ['oneaaa','twobbb','three','four']

for w in words_list:
    if w has suffix in suffixs:
          func(s,w)

我知道我可以使用re-package,但是re只能处理少于100个后缀,但是我有1000多个后缀。 我试着用

for w in words_list:
    for s in suffixs:
         #suffixs sorted by lenth
         if s is_suffix_of(w):
               func(s,w)
               break

但是太慢了。
func(s,w)可以将单词w拆分为无后缀单词和后缀。
例如'oneaaa'到['one','aaa'],但是func基于一些条件和更多很复杂。所以呢任何在这里都不起作用。
所以我想知道是否有更好的方法来处理它。你知道吗


Tags: inre列表forifnlp单词suffix
1条回答
网友
1楼 · 发布于 2024-10-03 11:13:29

如果您只是想看看哪些单词有“back fixes”(正确的术语是后缀,顺便说一句),您可以将^{}any结合使用

for w in words_list:
    if any(w.endswith(b) for b in back_fixs):
          print(w)

或者将所有后缀传递给endswith,但它们必须位于tuple,而不是list

back_fixs = tuple(back_fixs)
for w in words_list:
    if w.endswith(back_fixs):
          print(w)

如果您还需要知道哪个后缀匹配,您可以获得next,或者None如果不匹配:

for w in words_list:
    b = next((b for b in back_fixs if w.endswith(b)), None)
    if b:
          print(w, b)

或使用filterb = next(filter(w.endswith, back_fixs), None)缩短

或者没有默认值,使用try/except

for w in words_list:
    try:
        print(w, next(filter(w.endswith, back_fixs)))
    except StopIteration:
        pass

相关问题 更多 >