搜索嵌套列表

时间:2017-07-04 22:20:15

标签: python list nltk text-analysis

from nltk import word_tokenize

list_1 = [a, b, c, d, e, f]
list_2 = [[aa, bb, cc], [dd, ee], [ff], [gg, hh, ii, jj], [kk, ll], [mm, nn, oo]]
text = 'The lazy aa moves along the hh'
text_token = word_tokenize(text)

for word in text:
     if word in [j for i in list_2 for j in i]:
        print(list_2.index(word))
     else:
        print(word)

ValueError: 'hh' is not in list

我正在尝试对大量法语文本进行文本分析。我已经尝试过使用NLTK Stemmer,它并没有阻止我正在分析的大量单词。

我不熟悉python或任何其他编码语言(我来自人文科学)所以我也不完全确定如何搜索我正在寻找的问题,如果这个问题多余或容易解决,我会道歉。

我试图通过查找具有各种语法形式的法语单词列表来解决这个问题。我已经将列表编译成两个单独的列表:第一个列表包含我希望其他人使用的单词的根,而第二个列表是第一个列表中的项目可以采用的变体表单。我已经做到了这两个列表彼此对应。例如,list_1[0]将对应list_2[0]中的字词。因此,list_2中有许多不同长度的嵌套列表。

当我搜索嵌套列表时,似乎出现了我的问题。我必须遍历text_token以检查text_token中是否存在list_2中的任何字词。如果text_token中存在list_2,则会找到misc = list_2.index(word)。找到misc后,我想用搜索list_1[misc]替换单词。但是,在确认list_2中存在该单词后,我尝试print(list_2.index(word))查看它是否有效,但我一直在接收ValueError: 'hh' is not in list我不完全确定如何在嵌套列表之后循环已经这样做是为了避免这个错误,因为我假设当我第二次搜索定义时,它不会将嵌套列表视为多个项目。我试图通过在原始列表中检查后尝试另一个列表理解来避免这种情况,但最终会返回单个字母。我也尝试将这两个列表放入字典中,但我似乎无法弄清楚如何从.keys()中获得.values()

2 个答案:

答案 0 :(得分:0)

如果要获取主列表中子列表的索引,可以执行以下操作:

for word in text:
     for index, sublist in enumerate(list_2):
         if word in sublist:
             print(index)
             break
     else:
        print(word)

enumerate(list_2)遍历list_2的元素,这些元素是您的子列表,并在每一步产生子列表的索引和子列表本身。

然后,我们检查该单词是否在其中一个子列表中。

  • 如果是这种情况,我们会打印索引并将break打印出内部for循环。
  • 如果我们在任何子列表中找不到该字词,我们会执行else循环的for部分并打印该字词。

答案 1 :(得分:0)

你真的只想要一张地图,即dict。您可以使用以下字典理解*:

快速将当前数据移植到地图中
rootmap = {var:root for root, variants in zip(list1, list2) for var in variants} 

然后你可以使用:

print(rootmap.get(word, word))

这使用.get方法,如果找不到第一个参数,则将第二个值作为默认值。另外,dict成员资格测试比检查列表更有效,它是一个恒定时间操作,而对于列表成员资格测试是线性操作。如果您在list2中使用多次变量,则这一点变得更加重要。

*也可以使用for循环编写等价物:

rootmap = {}
for root, variants in zip(list1, list2): # iterate over your lists in parallel
    for var in variants:
        rootmap[var] = root

<强>买者

详细了解documentationdict的内容。请注意,dict将地图唯一键映射到值。

相关问题