Chcę sprawdzić w programie w języku Python, czy słowo jest w słowniku języka angielskiego.
Wydaje mi się, że najlepszym rozwiązaniem może być interfejs nltk wordnet, ale nie mam pojęcia, jak go używać do tak prostego zadania.
def is_english_word(word):
pass # how to I implement is_english_word?
is_english_word(token.lower())
W przyszłości mógłbym chcieć sprawdzić, czy w słowniku znajduje się forma liczby pojedynczej słowa (np. Właściwości -> właściwość -> angielskie słowo). Jak miałbym to osiągnąć?
/usr/share/dict/
i/var/lib/dict
może być przywoływany w konfiguracjach * nix.Nie będzie działać dobrze z WordNet, ponieważ WordNet nie zawiera wszystkich angielskich słów. Inną możliwością opartą na NLTK bez zaklęcia jest korpus słów NLTK
źródło
set(words.words())
Korzystanie z NLTK :
Powinieneś zapoznać się z tym artykułem, jeśli masz problemy z instalacją wordnet lub chcesz wypróbować inne metody.
źródło
Używanie zestawu do przechowywania listy słów, ponieważ wyszukiwanie ich będzie szybsze:
Odpowiadając na drugą część pytania, liczba mnoga byłaby już na dobrej liście słów, ale jeśli z jakiegoś powodu chcesz konkretnie wykluczyć je z listy, możesz rzeczywiście napisać funkcję, która je obsłuży. Ale angielskie zasady dotyczące liczby mnogiej są na tyle trudne, że na początek umieściłbym liczbę mnogą na liście słów.
Jeśli chodzi o listę angielskich słów, znalazłem kilka po prostu wpisując w Google „listę angielskich słów”. Oto jeden z nich: http://www.sil.org/linguistics/wordlists/english/wordlist/wordsEn.txt Możesz użyć Google dla brytyjskiego lub amerykańskiego angielskiego, jeśli chcesz konkretnie jeden z tych dialektów.
źródło
english_words
aset
zamiast alist
,is_english_word
będzie działać znacznie szybciej..xreadlines()
i po prostu iterowaćword_file
.wamerican
iwbritish
listy słów w amerykańskim i brytyjskim języku angielskim jako/usr/share/dict/*-english
. Informacje o pakiecie zawierają słowolist.sourceforge.net jako odniesienie.Aby uzyskać szybsze rozwiązanie oparte na NLTK, możesz zaszyfrować zestaw słów, aby uniknąć wyszukiwania liniowego.
źródło
Uważam, że istnieją 3 rozwiązania pakietowe umożliwiające rozwiązanie problemu. Są to pyenchant, wordnet i corpus (zdefiniowane samodzielnie lub z NTLK). Pyenchant nie mógł łatwo zainstalować w win64 z py3 . Wordnet nie działa zbyt dobrze, ponieważ jego korpus nie jest kompletny. Więc dla mnie wybieram rozwiązanie, na które odpowiada @Sadik i używam 'set (words.words ())', aby przyspieszyć.
Pierwszy:
Następnie:
źródło
Dzięki pyEnchant.checker SpellChecker:
źródło
W przypadku podejścia do sieci semantycznej można uruchomić zapytanie sparql względem WordNet w formacie RDF . Po prostu użyj modułu urllib, aby wysłać żądanie GET i zwrócić wyniki w formacie JSON, przeanalizuj za pomocą modułu Python „json”. Jeśli nie jest to angielskie słowo, nie uzyskasz żadnych wyników.
Jako kolejny pomysł, możesz zapytać API Wikisłownika .
źródło
Dla wszystkich użytkowników Linux / Unix
Jeśli Twój system operacyjny korzysta z jądra Linuksa, istnieje prosty sposób na pobranie wszystkich słów ze słownika angielsko / amerykańskiego. W katalogu
/usr/share/dict
maszwords
plik. Jest też bardziej szczegółowyamerican-english
ibritish-english
pliki. Zawierają wszystkie słowa w tym konkretnym języku. Możesz uzyskać dostęp do tego w każdym języku programowania, dlatego pomyślałem, że możesz chcieć o tym wiedzieć.Teraz, dla konkretnych użytkowników Pythona, poniższy kod Pythona powinien przypisać słowom listy wartość każdego słowa:
Mam nadzieję że to pomoże!!!
źródło