2016-01-21 5 views
0

Я нашел синонимы слова «растений»Найти подстроки в Python

syn = wordnet.synsets('plant')[0].lemmas() 
>>>[Lemma('plant.n.01.plant'), Lemma('plant.n.01.works'), Lemma('plant.n.01.industrial_plant')] 

и входного слова

word = 'work' 

Я хочу, чтобы найти, если появляется «работа» в син. Как это сделать?

+0

Я не очень уверен, что вам нужно, но попробовать это : 'from nltk.corpus import wordnet как wn; wn.synsets ('plant') [0] .lemma_names() ' – alvas

ответ

1

Вы можете легко проверить на наличие подстроки, используя ключевое слово in в Python:

>>> word = "work" 
>>> word in 'plant.n.01.works' 
True 
>>> word in 'plant.n.01.industrial_plant' 
False 

Если вы хотите, чтобы проверить это в списке, вы можете сделать петлю:

syn = ["plant.one","plant.two"] 
for plant in syn: 
    if word in plant: 
     print("ok") 

Или лучше список понимание:

result = [word in plant for plant in syn] 
# To get the number of matches, you can sum the resulting list: 
sum(result) 

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

words_to_search = ["work","spam","foo"] 
syn = ["plant.one","plant.two"] 
for word in words_to_search_for: 
    if sum([word in plant for plant in syn]): 
     print("{} is present in syn".format(word)) 

Обратите внимание, что вы манипулируете Lemma объектов, а не строки. Возможно, вам потребуется проверить на word in plant.name вместо word, если объект не реализует метод [__contains__](https://docs.python.org/2/library/operator.html#operator.__contains__). Однако я не знаком с этой библиотекой.

+0

в работах отлично. но что, если я хочу искать более 100 лемм. Я хочу получить общее решение @Geeklhem – user3582454

+0

Я добавил абзац, но я не уверен, если я пойму, что вы имеете в виду. – Geeklhem

1

Lemma «s есть метод name() так, что вы можете сделать, это

>>> 'works' in map(lambda x: x.name(), syn) 
True 

Edit: не видел ты сказал "работа", не работает, так что это было бы:

>>> for i in syn: 
...  if 'work' in i.name(): 
...    print True 
... 
True 

Вы можете обернуть его в функцию, например.

Или смесь из двух предложений, которые я сделал:

+0

Woww .. Python настолько мощный OOoo .. Thnx @Alex Христос. Это прекрасно работает – user3582454

0
str1 = "this is a example , xxx" 
str2 = "example" 
target_len = len(str2) 
str_start_position = str1.index(str2) #or str1.find(str2) 
str_end_position = str_start_position + target_len 

вы можете использовать str_start_position и str_end_position, чтобы получить целевой подстроки

Смежные вопросы