2016-05-15 3 views
1

В настоящее время я работаю на python и использую NLTK для извлечения данных из моих данных. Одна функция, которую я хочу извлечь, - это позиция определенного слова запроса в предложении. Для достижения этой цели, я попыталсяПозиция слова запроса

String.find(word) 

Но это дает мне больше слов, чем общее количество слов в тексте.

Просьба предложить мне какой-то способ найти позицию определенного слова в слове.

Например, «Сегодня мой день рождения» Позиция слова дня рождения - 4. Как это сделать?

ответ

1
string = 'Today is my birthday' 
string.find('my') #Out: 9 
string[9:] #Out: 'my birthday' 

find не ищет строку в терминах слов, но как символы. Для простых примеров, которые Вы могли бы сделать это (обратите внимание, что это нулевой индексированный):

words = string.split() 
words.index('my') #Out: 2 

EDIT

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

import re 
word_re = re.compile('\w+') 
words = map(lambda match: match.group(0), word_re.finditer(string)) 
words.index('my') #Out: 2 

EDIT2

try: 
    words.index('earthquake') 
except ValueError: 
    print 'handle missing word here' 
+0

когда я применяю split, это дает мне ошибку ** Traceback (последний последний звонок): Файл «C: \ Users \ user \ workspace \ test1 \ te st1 \ final.py ", строка 36, в fdist2 = fdist1.split (" землетрясение ") AttributeError: объект 'list' не имеет атрибута 'split' ** – SmartF

+0

Что такое fdlist1? Используйте split в исходной строке предложения. Затем используйте индекс для результата этого разделения. – tavo

+0

Также split используется для разделения строки на пробелы. index - это метод, который используется для поиска определенного слова в списке слов. – tavo

1

Вы можете TRANSFERT текст списка строку, используя повторно или NLTK, после того, как вы можете найти мир:

import re 
text = "Today is my birthday" 
word = "birthday" 
words1 = re.sub("[^\w]", " ", text).split() # using re 

import nltk 
words2 = nltk.word_tokenize(text) # using nltk 

position = 1 
for str in words1 :# or for str in words2 : 
    if str == word: 
     print position 
    position += 1 
+0

Вам нужно изменить последнюю строку вашего кода 'position + = 1' на' position + = 1', поскольку вы не можете вставить пробел между '+' и '=' в ' Добавить оператор AND'. Это приведет к ошибке синтаксиса – Tanu

+0

Спасибо Tanu, я исправил его –

+0

спасибо khelili hamza я получил его сейчас – SmartF

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