【问题标题】:concatenate pieces of a words separated in different lists连接在不同列表中分隔的单词片段
【发布时间】:2019-03-14 16:55:39
【问题描述】:

我有两个单词/字符串列表:x 和 y。 x 中某些单词的另一部分在 y 中,我想将它们连接起来。例如,我想将列表 x 中的单词“engage”与列表 y 中的其他部分“ments”或列表 x 中的“操作”连接起来使用列表 y 中的“nelle”。如果列表 x 中的每个单词/标记都存在于 dic 中并且连接的单词存在于 dic 中,我还需要检查字典。如果是这样,请将它们附加到另一个列表(文本)。我一直在尝试不成功的代码是:

import nltk
from nltk.tokenize import word_tokenize
x=['les', 'engage', 'président', 'de', 
'la', 'république', 'sont', 'aussi', 
'ceux', 'des', 'dirigeants', 'de', 'la', 
'société', 'ferroviaire', ',', 'a-t-il', 
'soutenu', 'de', 'élus', 'du', 'réunis', 
'à', '’', 'le', 'président', 'de', 'la', 
'république', ',', '(', 'à', 'droite', 
')', ',', 'aux', 'côtés', 'du', 'patron', 
'de', 'la', ',', 'guillaume', 'à', 'la', 
'gare', 'à', 'paris', ',', 'le', 
'juillet', 'der', '’', 'irrita', ',', 
'par', 'fois', ',', '’', 'usa', 'la', 
'face', 'aux', 'trains', 'supprimés', 
'aux', 'dessertes', 'abandonnées', 
'semble', 'avoir', 'aussi', 'saisi', 'le', 
'président', 'de', 'la', 'république', 
'.', 'devant', 'des', 'élus', 'du', ',', 
'réunis', 'mardi', 'février', 'à', '’', 
'le', 'cadre', 'du', 'grand', 'débat', 
',', 'a', 'eu', 'des', 'mots', 'très', 
'durs', 'contre', 'la', ',', 'qui', 'a', 
'fermé', 'la', 'ligne', '-', 'décembre', 
',', 'alors', 'que', 'le', 'chef', 'de', 
'’', '’', 'était', 'engagé', ',', 
'durant', 'un', 'déplacement', 'dans', 
'les', 'tué', 'en', 'avril', ',', 'à', 
'ce', '’', 'elle', 'reste', 'opération']


y=['ments', 'prési', 'républi', 'vant', 
'elysée', 'emmanuel', 'macron', 'cô', 
'pepy', 'montparnasse', 'geoffroy', 
'hasselt', '/', 'afp', 'tion', 'empare', 
'gers', 'més', 'elysée', 'emmanuel', 
'macron', 'epinal', 'etat', 'dépla', 
'cement', 'vosges', 'effec', 'nelle']

text=[ ]

with open ('Fr-dictionary.txt') as d:
dic = word_tokenize(d.read().lower())

for i in x:
  if i in dic:
    text.append(i)
  else:
    for j in y:
      concatenated = i + j
      if concatenated in dic:
        text.append(concatenated)

print(text)

这里有什么问题?

【问题讨论】:

标签: python string list concatenation


【解决方案1】:

好的,我设法让您的代码正常工作。

首先我必须在import nltk 之后添加nltk.download('punkt')

然后我评论了我的解决方案,但如果有不清楚的地方,请随时询问:

cat_x_y = []
text = []

with open ('Fr-dictionary.txt') as d:
    dic = word_tokenize(d.read().lower())

#for each word in x check if they are in the dictonary 
for word in x:
    if word in dic:
        text.append(word)
#same for y
for word in y:
    if word in dic:
        text.append(word)

#for each word in x I want to add y and put it in cat_x_y
for i in range(len(x)):
    for word in y:
        cat_x_y.append(x[i]+word)

#for each word in y I want to add x and put it in cat_x_y
for j in range(len(y)):
    for word in x:
        cat_x_y.append(y[j]+word)

#remove duplicate in the cat_x_y:
cat_x_y = list(dict.fromkeys(cat_x_y))

#for each word in cat_x_y add the to text if they are in the dictionary
for word in cat_x_y:
    if word in dic:
        text.append(word)

#remove duplicate from text
text = list(dict.fromkeys(text))
print(text)

我假设您要检查来自 x 的单词和来自 y 的单词。 但也尝试添加 x+y 和 y+x

以下是我执行代码时得到的词: ['les', 'engage', 'président', 'de', 'la', 'république', 'sont', 'aussi', 'ceux', 'des', 'dirigeants', 'société', 'ferroviaire', 'a-t-il', 'soutenu', 'élus', 'du', 'réunis', 'à', 'le', 'droite', 'aux', 'côtés', 'patron', 'guillaume', 'gare', 'paris', 'juillet', 'der', 'irrita', 'par', 'fois', 'usa', 'face', 'trains', 'supprimés', 'dessertes', 'abandonnées', 'semble', 'avoir', 'saisi', 'devant', 'mardi', 'février', 'cadre', 'grand', 'débat', 'a', 'eu', 'mots', 'très', 'durs', 'contre', 'qui', 'fermé', 'ligne', 'décembre', 'alors', 'que', 'chef', 'était', 'engagé', 'durant', 'un', 'déplacement', 'dans', 'tué', 'en', 'avril', 'ce', 'elle', 'reste', 'opération', 'engagements', 'lavant', 'lamés', 'lacement', 'levant', 'irritation', 'usagers', 'avant', 'quenelle', 'cenelle', 'opérationnelle', 'préside', 'présides', 'présider', 'vantaux', 'vanta', 'mésusa', 'déplace', 'effectué']

【讨论】:

  • 非常感谢,但我不能在同一个列表中包含“参与”和“参与”以及“替换”和“替换”。该程序的目的是连接一个单词中由换行符分隔的部分。输出与原始文本具有相同的单词和相同的词序。
  • 您能否提供一个简短的虚拟示例,其中包含 x、y 和最终文本,以确保我们正在寻找相同的过程?谢谢!
猜你喜欢
  • 2019-08-07
  • 2020-08-22
  • 1970-01-01
  • 1970-01-01
  • 2012-01-31
  • 2019-03-29
  • 2011-10-15
  • 2013-06-24
相关资源
最近更新 更多