2013-08-04 5 views
0

Я работаю над проектом NLP на основе Python/NLTK с текстом в формате unicode, отличным от английского. Для этого мне нужно найти строку unicode внутри предложения.Поиск символов Юникода в Python

Файл .txt сохранен с некоторыми предложениями, не связанными с английским юникодом. Использование NLTK PunktSentenceTokenizer Я сломал их и сохранил в списке python.

sentences = PunktSentenceTokenizer().tokenize(text) 

Теперь я могу перебирать список и получить каждый sentence отдельно.


Что мне нужно сделать, это пройти через этот sentence и определить, какое слово имеет заданные символы Юникода.

Пример -

sentence = 'AASFG BBBSDC FEKGG SDFGF' 

Предположит выше текст не является английским юникодом, и мне нужно, чтобы найти слова, оканчивающиеся GF затем возвращают целое слово (может быть показателем этого слова).

search = 'SDFGF' 

Точно так же я должен найти слова, начинающиеся с BB получить слово.

search2 = 'BBBSDC' 

ответ

1

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

>>> sentence = ['AASFG', 'BBBSDC', 'FEKGG', 'SDFGF'] 
>>> [word for word in sentence.split() if word.endswith("GF")] 
['SDFGF'] 

sentence.split() мог вероятно, будет заменен на что-то вроде nltk.tokenize.word_tokenize(sentence)

Update, в отношении комментариев:

Как получить слово-перед, что и за ним

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

>>> print list(enumerate(sentence)) 
[(0, 'AASFG'), (1, 'BBBSDC'), (2, 'FEKGG'), (3, 'SDFGF')] 

Тогда, если вы делаете то же цикл, но сохранить индекс:

>>> results = [(idx, word) for (idx, word) in enumerate(sentence) if word.endswith("GG")] 
>>> print results 
[(2, 'FEKGG')] 

..you может использовать индекс, чтобы получить следующий или предыдущий элемент:

>>> for r in results: 
...  r_idx = r[0] 
...  print "Prev", sentence[r_idx-1] 
...  print "Next", sentence[r_idx+1] 
... 
Prev BBBSDC 
Next SDFGF 

Вы должны были бы обрабатывать случай, когда матч очень первое или последнее слово (if r_idx == 0, if r_idx == len(sentence))

+0

Теперь я получил еще один вопрос. Из кода выше я мог найти слова, заканчивающиеся или начинающиеся с заданных букв. Как можно получить слово перед этим и за ним. Например, если я ищу GG и получил FEKGG, а затем мне нужно получить BBBSDC как слово вперед, SDFGF и слово позади. – ChamingaD

+1

@ChamingaD Обновленный ответ – dbr

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