在Python中创建列表列表

时间:2016-02-29 17:06:04

标签: python list python-2.7 nltk python-2.x

我的句子很少,比如,

the film was nice.  
leonardo is great. 
it was academy award.

现在我希望它们被标记为可能看起来像的标准,

the DT film NN was AV nice ADJ
leonardo NN is AV great ADJ
it PRP was AV academy NN award NN

我能做到,但我的目标是将其视为,

[[('the','DT'),('film', 'NN'),('was','AV'),('nice','ADJ')],[('leonardo','NN'),('is','AV'),('great','ADJ')],[('it','PRP'),
('was','AV'),('academy','NN'),('award','NN')]]

这是一个列表列表,其中每个列表中都有一组元组。 我可以像我一样解决每一个问题 一个包含元组的列表,但不是全部在一个列表中。 我写了下面的代码,

def entity_tag():
    a1=open("/python27/EntityString.txt","r")
    a2=a1.read().lower().split()
    print "The Original String in List form for Comparison:",a2
    a3=open("/python27/EntityDict1.txt","r")
    a4=a3.read().split()
    list1=[]
    list2=[]
    for word in a2:
        if word in a4:
            windex=a4.index(word)
            windex1=windex+1
            word1=a4[windex1]
            word2=word+" "+word1+"$"
            list1.append(word2)
        elif word not in a4:
            word3=word+" "+"NA"+"$"
            list1.append(word3)
        else:
            print "None"
    print list1
    string1=" ".join(list1)
    print string1
    stringw=string1.split("$")
    print stringw
    for subword in stringw:
        #print subword
        subword1=subword.split()
        #print subword1
        subwordt=tuple(subword1)
        #print subwordt
        list2.append(subwordt)
    print "The Tagged Word in list:",list2

因为它是PoS标记,所以我无法使用zip。 如果有人可以请建议。

我在MS-Windows 10上使用Python2.7.11。

2 个答案:

答案 0 :(得分:1)

请参阅https://stackoverflow.com/a/5394908/610569

>>> x = "the DT film NN was AV nice ADJ leonardo NN is AV great ADJ it PRP was AV academy NN award NN".split()
>>> zip(x,x[1:])[::2]
[('the', 'DT'), ('film', 'NN'), ('was', 'AV'), ('nice', 'ADJ'), ('leonardo', 'NN'), ('is', 'AV'), ('great', 'ADJ'), ('it', 'PRP'), ('was', 'AV'), ('academy', 'NN'), ('award', 'NN')]

答案 1 :(得分:0)

如果你的标记字符串是这样的,就像你写的那样:

the DT film NN was AV nice ADJ
leonardo NN is AV great ADJ
it PRP was AV academy NN award NN

然后你可以这样做:

[zip(*[iter(line.split())] * 2) for line in lines]

其中,线代表[可迭代的]句子。

输出:

[[('the', 'DT'), ('film', 'NN'), ('was', 'AV'), ('nice', 'ADJ')],
 [('leonardo', 'NN'), ('is', 'AV'), ('great', 'ADJ')], 
 [('it', 'PRP'), ('was', 'AV'), ('academy', 'NN'), ('award', 'NN')]]


如果你有一个唯一的字符串要标记,并且在你标记它们之后,没有任何内容已经提供了关于如何分割字符串以获得你不再有机会获得它的句子列表的信息,除了默认长度你仍然可以用作分隔符。 所以,你需要决定你的代码如何处理你的字符串或单词列表或单词,标签的最终列表,以保持每个句子分开......你需要一个分隔符