Я хочу проверить в программе Python, есть ли слово в английском словаре.
Я считаю, что интерфейс nltk wordnet может быть подходящим вариантом, но я понятия не имею, как его использовать для такой простой задачи.
def is_english_word(word):
pass # how to I implement is_english_word?
is_english_word(token.lower())
В будущем я, возможно, захочу проверить, есть ли единственная форма слова в словаре (например, свойства -> свойство -> английское слово). Как бы я этого достиг?
/usr/share/dict/
и/var/lib/dict
можно ссылаться на настройки * nix.Это не будет работать с WordNet, потому что WordNet не содержит всех английских слов. Еще одна возможность, основанная на НЛТК без чар, - это корпус слов НЛТК
источник
set(words.words())
Используя NLTK :
Вам следует обратиться к этой статье, если у вас возникли проблемы с установкой Wordnet или вы хотите попробовать другие подходы.
источник
Использование набора для хранения списка слов, потому что их поиск будет быстрее:
Чтобы ответить на вторую часть вопроса, множественное число уже будет в хорошем списке слов, но если вы хотите по какой-то причине специально исключить их из списка, вы действительно можете написать функцию для его обработки. Но правила множественного числа в английском языке достаточно хитры, поэтому я бы просто включил множественное число в список слов для начала.
Что касается того, где найти списки английских слов, я нашел несколько только с помощью Googling "English word list". Вот один из них: http://www.sil.org/linguistics/wordlists/english/wordlist/wordsEn.txt Вы можете использовать Google для британского или американского английского, если вам нужен именно один из этих диалектов.
источник
english_words
set
list
is_english_word
.xreadlines()
и просто повторитьword_file
.wamerican
иwbritish
обеспечивают американские и британские английские списки слов , как/usr/share/dict/*-english
. Информация о пакете дает ссылку на wordlist.sourceforge.net .Для более быстрого решения на основе NLTK вы можете хешировать набор слов, чтобы избежать линейного поиска.
источник
Я считаю, что есть 3 пакетных решения для решения проблемы. Это пиенчант, wordnet и корпус (самоопределяемые или из ntlk). Pyenchant не удалось легко установить в win64 с py3 . Wordnet работает не очень хорошо, потому что его корпус не завершен. Поэтому я выбираю решение, на которое отвечает @Sadik , и использую set (words.words ()) для ускорения.
Первый:
Затем:
источник
С помощью pyEnchant.checker SpellChecker:
источник
Для семантического веб-подхода вы можете выполнить запрос sparql к WordNet в формате RDF . В основном просто используйте модуль urllib для выдачи запроса GET и возврата результатов в формате JSON, синтаксический анализ с использованием модуля python 'json'. Если это не английское слово, вы не получите результатов.
Еще одна идея - запросить API Викисловаря .
источник
Для всех пользователей Linux / Unix
Если ваша ОС использует ядро Linux, есть простой способ получить все слова из англо-американского словаря. В каталоге у
/usr/share/dict
вас естьwords
файл. Существует также более конкретныеamerican-english
иbritish-english
файлы. Они содержат все слова на этом конкретном языке. Вы можете получить доступ к этому на любом языке программирования, поэтому я подумал, что вы, возможно, захотите узнать об этом.Теперь для пользователей, специфичных для python, приведенный ниже код на python должен назначать списку слов значение каждого отдельного слова:
Надеюсь это поможет!!!
источник