2015-06-11 57 views
0

我目前有包含一個看起來像找到句子的指數特定單詞(列表中的句子)在Python

example = ['Mary had a little lamb' , 
     'Jack went up the hill' , 
     'Jill followed suit' ,  
     'i woke up suddenly' , 
     'it was a really bad dream...'] 

我想找到一句與索引列表的文件例如「醒來」一詞。 在這個例子中,答案應該是f(「woke」)= 3。 F是一個功能。

我試圖來標記每個句子先找到喜歡這個詞的索引:

>>> from nltk.tokenize import word_tokenize 
>>> example = ['Mary had a little lamb' , 
...   'Jack went up the hill' , 
...   'Jill followed suit' ,  
...   'i woke up suddenly' , 
...   'it was a really bad dream...'] 
>>> tokenized_sents = [word_tokenize(i) for i in example] 
>>> for i in tokenized_sents: 
...  print i 
... 
['Mary', 'had', 'a', 'little', 'lamb'] 
['Jack', 'went', 'up', 'the', 'hill'] 
['Jill', 'followed', 'suit'] 
['i', 'woke', 'up', 'suddenly'] 
['it', 'was', 'a', 'really', 'bad', 'dream', '...'] 

但我不知道如何最終得到了字的索引以及如何將其鏈接到句子的索引。有人知道如何做到這一點?

+0

如果在多個sentances存在什麼字?返回第一個? – CoryKramer

+0

是的,至少有一種或所有的可能性,但在我的情況下,我應該只有一個 – alexdtx

回答

1

可以遍歷在列表中的每個字符串上,在空白處分割,然後查看您的搜索詞是否在該單詞列表中。如果在列表理解中這樣做,則可以將索引列表返回到滿足此要求的字符串。

def f(l, s): 
    return [index for index, value in enumerate(l) if s in value.split()] 

>>> f(example, 'woke') 
[3] 
>>> f(example, 'foobar') 
[] 
>>> f(example, 'a') 
[0, 4] 

如果您喜歡用nltk

def f(l, s): 
    return [index for index, value in enumerate(l) if s in word_tokenize(value)] 
+0

我打算髮表類似的答案,但是你不需要「分裂」,是嗎? – jrjc

+0

@jeanrjc只有當''a''是一個單獨的單詞時,你纔會這樣做,它不符合''帽子'中的''a''。 – CoryKramer

+0

啊,是的,確切的,謝謝! – jrjc

0
for index, sentence in enumerate(tokenized_sents): 
    if 'woke' in sentence: 
     return index 

對於所有的句子:

return [index for index, sentence in enumerate(tokenized_sets) if 'woke' in sentence] 
0

如果要求用這個詞,你可以使用類似的發生返回的第一句話 -

def func(strs, word): 
    for idx, s in enumerate(strs): 
     if s.find(word) != -1: 
      return idx 
example = ['Mary had a little lamb' , 
     'Jack went up the hill' , 
     'Jill followed suit' ,  
     'i woke up suddenly' , 
     'it was a really bad dream...'] 
func(example,"woke") 
相關問題