Есть ли простой способ генерировать вероятный список слов из несложенного предложения в python?

У меня есть текст:

s="Imageclassificationmethodscan beroughlydividedinto two broad families of approaches:" 

Я хотел бы разобрать это на отдельные слова. Я быстро заглянул в чары и nltk, но не увидел ничего, что выглядело сразу же полезным. Если бы у меня было время инвестировать в это, я бы задумал написать динамическую программу с возможностью зачарования проверить, было ли слово английским или нет. Я бы подумал, что будет что-то делать онлайн, я не прав?

2 Solutions collect form web for “Есть ли простой способ генерировать вероятный список слов из несложенного предложения в python?”

Жадный подход с использованием trie

Попробуйте это с помощью Biopython ( pip install biopython ):

 from Bio import trie import string def get_trie(dictfile='/usr/share/dict/american-english'): tr = trie.trie() with open(dictfile) as f: for line in f: word = line.rstrip() try: word = word.encode(encoding='ascii', errors='ignore') tr[word] = len(word) assert tr.has_key(word), "Missing %s" % word except UnicodeDecodeError: pass return tr def get_trie_word(tr, s): for end in reversed(range(len(s))): word = s[:end + 1] if tr.has_key(word): return word, s[end + 1: ] return None, s def main(s): tr = get_trie() while s: word, s = get_trie_word(tr, s) print word if __name__ == '__main__': s = "Imageclassificationmethodscan beroughlydividedinto two broad families of approaches:" s = s.strip(string.punctuation) s = s.replace(" ", '') s = s.lower() main(s) 

Результаты

 >>> if __name__ == '__main__': ... s = "Imageclassificationmethodscan beroughlydividedinto two broad families of approaches:" ... s = s.strip(string.punctuation) ... s = s.replace(" ", '') ... s = s.lower() ... main(s) ... image classification methods can be roughly divided into two broad families of approaches 

Предостережения

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

Обязательный тест

 >>> main("expertsexchange") experts exchange 

Это своего рода проблема, которая часто встречается в азиатских НЛП. Если у вас есть словарь, вы можете использовать этот http://code.google.com/p/mini-segmenter/ (Отказ от ответственности: я написал его, надеюсь, вы не против).

Обратите внимание, что пространство поиска может быть чрезвычайно большим, потому что количество символов в алфавитном английском языке, конечно, длиннее, чем силлабический китайский / японский.

  • Разборчивость Значение из текста
  • Regex добавить символ к строке
  • Есть ли lib для python, который даст мне синонимы слова?
  • Как нормализовать имена
  • Python. Может ли веб-сервер избегать создания важности для каждого запроса?
  • Количество глаголов, существительных и других частей речи с помощью NLTK python
  • Есть ли способ программно объединить корейский юникод в один?
  • Точная репликация текстовой предварительной обработки текста в python
  • Оцените фонематическое сходство между двумя словами
  • NLTK / NLP, выполняющий классификацию предметных разделов с множеством / многими метками
  • Интеграция Python и .NET
  • Python - лучший язык программирования в мире.