我需要循环访问包含法语单词的列表并找到一个星号,因为每次出现一个星号时,我都希望将星号之前的单词与星号之后的单词连接起来,并继续到下一个。 例如,按以下顺序:
['les','engage', '*', 'ment', 'de','la']
我要串联“接合”和“ ment”,并且输出(接合)应由字典检查。如果在字典中,请追加到列表中。
使用我的代码,我只会得到星号:
import nltk
from nltk.tokenize import word_tokenize
import re
with open ('text-test.txt') as tx:
text =word_tokenize(tx.read().lower())
with open ('Fr-dictionary.txt') as fr:
dic = word_tokenize(fr.read().lower())
ast=re.compile(r'[\*]+')
regex=list(filter(ast.match,text))
valid_words=[]
invalid_words=[]
last = None
for w in text:
if w in regex:
last=w
a=last + w[+1]
break
if a in dic:
valid_words.append(a)
else:
continue
答案 0 :(得分:3)
Python的方法不是思考“时间旅行”(即来回走动),而是考虑功能性(时间旅行在资源非常有限的环境中存在)。
一种方法是按照@Yosufsn所示进行枚举。另一个方法是zip
与列表一起使用,但在任一侧都添加填充。像这样:
words = ['les','engage', '*', 'ment', 'de','la']
for a,b,c in zip([None]*2+words, [None]+words+[None], words+[None]*2):
if b == '*':
print( a+c )
答案 1 :(得分:1)
我认为您需要一个像这样的简单代码:
words = ['les','engage', '*', 'ment', 'de','la']
for n,word in enumerate (words):
if word == "*":
exp = words[n-1] + words[n+1]
print (exp)
输出:
"engagement"
使用此输出,您可以随后查看字典。
答案 2 :(得分:0)
我想知道如何管理这样的列表(废话):
words = ['Bien', '*', 'venue', 'pour', 'les','engage', '*', 'ment', 'trop', 'de', 'YIELD', 'peut','être','contre', '*', 'productif' ]
所以我给你提供了这样的方法:
def join_asterisk(ary):
i, size = 0, len(ary)
while i < size-2:
if ary[i+1] == '*':
yield ary[i] + ary[i+2]
i+=2
else: yield ary[i]
i += 1
if i < size:
yield ary[i]
哪个返回:
print(list(join_asterisk(words)))
#=> ['Bienvenue', 'pour', 'les', 'engagement', 'trop', 'de', 'YIELD', 'peut', 'être', 'contreproductif']