2014-12-15 3 views
0

У меня есть список слов и строка. Я хочу взять каждое слово в списке слов и проверить, соответствует ли оно любому из слов в строке.Как проверить строку для определенных слов без получения совпадений для частей слов в строке в Python?

словник = [ 'я', 'любовь', 'этот', 'телефон', 'удивительный', 'быть']

строку = "любовь удивительно большой лучший хороший хороший"

I есть следующий код:

for word in wordsList: 

     posMatch = re.search(word, string) 
      if posMatch: 
       print (posMatch.group()) 

Таким образом, в этом случае выход:

i 
love 
amazing 
be 

Но мне нужен выход быть:

love 
amazing 

Принимает «i» и «be» в качестве соответствия, потому что они являются частью некоторых слов в строке. Я мог бы разместить пробел до и после регулярного выражения, но я не уверен, как это сделать. У кого-нибудь есть хороший способ сделать это? Заранее спасибо.

+1

использовать '\ b' regexp для соответствия границам слов. – Barmar

+0

Если вы делаете это для производственного кода, вы можете взглянуть на [nltk] (http://www.nltk.org/) –

+0

благодарность @Barmar. Но можете ли вы показать мне, как написать код для этого? – modarwish

ответ

0

Одним из способов достижения этой цели было бы разделить вашу строку в список, а затем проверить, если каждое слово в списке:

string_list = string.split(' ') 
for word in wordList: 
    if word in string_list: 
     print word 

Чтобы сделать это с помощью модуля повторно вы будете нуждаться в/б regex anchor для обозначения границ слов

for word in wordList: 
    posMatch = re.search(r'\b%s\b' % word, string) 
    if posMatch: 
     print (posMatch.group()) 
+1

Это довольно много расколов и поиск вверх происходит там, хотя ... –

+0

Что JonClements сказал: повторное разделение 'string' каждый раз через цикл является _very_ расточительным. Было бы лучше сделать это за пределами цикла. И вы можете ускорить поиск, если вы сохраните слова из 'string' в наборе. Кроме того, использование имени модуля типа 'string' в качестве имени переменной немного запутанно, но я понимаю, что вы просто скопировали это из OP. –

+0

спасибо, что объяснил это, я изменил свой ответ. – brobas