2015-10-13 4 views
0

У меня есть список предложения listOfSentences который выглядит следующим образом:сравнение вложенных элементов в списке с другими

listOfSentences = ['mary had a little lamb.', 
        'she also had a little pram.', 
        'bam bam bam she also loves ham.', 
        'she ate the lamb.'] 

У меня также есть словарь keywords который выглядит следующим образом:

keyWords= {('bam', 3), ('lamb', 2), ('ate', 1)} 

где чем выше частота, тем меньше ключ в keyWords.

>>> print(keySentences) 
>>> ['bam bam bam she also loves ham.', 'she ate the lamb.',] 

Мой вопрос: как я могу сравнить элементы в keyWords к элементам в listOfSentences так что я может выводить список keySentences

ответ

1

keyWords более полезна, если это словарь, то это просто поиск словаря, чтобы получить оценку каждого слова. Каждое слово можно извлечь, используя split().

Вот несколько кодов для этого. Это предполагает, что пунктуация часть слова (в качестве примера результирующий список keySentences означает):

listOfSentences = ['mary had a little lamb.', 
        'she also had a little pram.', 
        'bam bam bam she also loves ham.', 
        'she ate the lamb.'] 

keyWords= [('bam', 3), ('lamb', 2), ('ate', 1)] 
keyWords = dict(keyWords) 

keySentences = [] 
for sentence in listOfSentences: 
    score = sum(keyWords.get(word, 0) for word in sentence.split()) 
    if score > 0: 
     keySentences.append((score, sentence)) 

keySentences = [sentence for score, sentence in sorted(keySentences, reverse=True)] 
print(keySentences) 

Выход

 
['bam bam bam she also loves ham.', 'she ate the lamb.'] 

Если вы хотите игнорировать знаки препинания вы можете удалить его из каждое предложение до обработки:

import string 

# mapping to remove punctuation with str.translate() 
remove_punctuation = {ord(c): None for c in string.punctuation} 

listOfSentences = ['mary had a little lamb.', 
        'she also had a little pram.', 
        'bam bam bam she also loves ham.', 
        'she ate the lamb.'] 

keyWords= [('bam', 3), ('lamb', 2), ('ate', 1)] 
keyWords = dict(keyWords) 

keySentences = [] 
for sentence in listOfSentences: 
    score = sum(keyWords.get(word, 0) for word in sentence.translate(remove_punctuation).split()) 
    if score > 0: 
     keySentences.append((score, sentence)) 

keySentences = [sentence for score, sentence in sorted(keySentences, reverse=True)] 
print(keySentences) 

Выход

 
['bam bam bam she also loves ham.', 'she ate the lamb.', 'mary had a little lamb.'] 

Теперь результирующий список также содержит «мэри был барашек». потому что полный конечный «ягненок» был удален str.translate().

0

попробовать, как это:

>>> [x for x in listOfSentences for i in keyWords if x.count(i[0])==i[1]] 
['bam bam bam she also loves ham.', 'she ate the lamb.'] 
+0

это также будет соответствовать 'поздно ate' – The6thSense

+0

OP только сказал, для слово, может быть, ему нужно точное совпадение – Hackaholic

+0

, вот что я говорю, что вы делаете частичное совпадение здесь, и как вы пришли к этой логике, я не могу понять, что ОП задает – The6thSense

1

Следующая забьет ваши предложения по пунктам соответствия слова:

import re 

keyWords = [('bam', 3), ('lamb', 2), ('ate', 1)] 
keyWords = [w for w, c in keyWords]  # only need the words 

listOfSentences = [ 
    'mary had a little lamb.', 
    'she also had a little pram.', 
    'bam bam bam she also loves ham.', 
    'she ate the lamb.']  

words = [re.findall(r'(\w+)', s) for s in listOfSentences] 
keySentences = [] 

for word_list, sentence in zip(words, listOfSentences): 
    keySentences.append((len([word for word in word_list if word in keyWords]), sentence)) 

for count, sentence in sorted(keySentences, reverse=True): 
    print '{:2} {}'.format(count, sentence) 

Давать вам следующий вывод:

3 bam bam bam she also loves ham. 
2 she ate the lamb. 
1 mary had a little lamb. 
0 she also had a little pram 
Смежные вопросы