파이썬으로 단어가 영어 단어인지 확인하는 방법은 무엇입니까?
영어 사전에 단어가 있는지 파이썬 프로그램을 확인하고 싶습니다.
nltk wordnet 인터페이스가 좋은 방법일 수도 있다고 생각하지만, 그런 간단한 작업에 어떻게 사용해야 할지 모르겠습니다.
def is_english_word(word):
pass # how to I implement is_english_word?
is_english_word(token.lower())
앞으로 단어의 단수 형태가 사전에 있는지(예: 속성 -> 속성 -> 영어 단어) 확인하고 싶을 수도 있습니다.제가 어떻게 그것을 달성할 수 있을까요?
보다 강력한 성능과 유연성을 제공하려면 와 같은 전용 맞춤법 검사 라이브러리를 사용합니다.튜토리얼이 있거나 다음과 같이 바로 진행할 수 있습니다.
>>> import enchant
>>> d = enchant.Dict("en_US")
>>> d.check("Hello")
True
>>> d.check("Helo")
False
>>> d.suggest("Helo")
['He lo', 'He-lo', 'Hello', 'Helot', 'Help', 'Halo', 'Hell', 'Held', 'Helm', 'Hero', "He'll"]
>>>
PyEnchant
에는 몇 개의 사전(en_GB, en_US, de_DE, fr_FR)이 함께 제공되지만 추가 언어를 원하는 경우 OpenOffice 사전을 사용할 수 있습니다.
라는 다원화 라이브러리가 있는 것 같은데, 괜찮은지 모르겠습니다.
WordNet에는 모든 영어 단어가 포함되어 있지 않기 때문에 WordNet에서는 잘 작동하지 않습니다.마법사 없이 NLTK를 기반으로 하는 또 다른 가능성은 NLTK의 단어 코퍼스입니다.
>>> from nltk.corpus import words
>>> "would" in words.words()
True
>>> "could" in words.words()
True
>>> "should" in words.words()
True
>>> "I" in words.words()
True
>>> "you" in words.words()
True
NLTK 사용:
from nltk.corpus import wordnet
if not wordnet.synsets(word_to_test):
#Not an English Word
else:
#English Word
워드넷을 설치하는 데 문제가 있거나 다른 방법을 시도하고 싶다면 이 기사를 참조해야 합니다.
단어 목록을 검색하는 것이 더 빠르기 때문에 집합을 사용하여 단어 목록을 저장합니다.
with open("english_words.txt") as word_file:
english_words = set(word.strip().lower() for word in word_file)
def is_english_word(word):
return word.lower() in english_words
print is_english_word("ham") # should be true if you have a good english_words.txt
질문의 두 번째 부분에 대답하자면, 복수는 이미 좋은 단어 목록에 있을 것이지만, 만약 당신이 어떤 이유로 그것들을 목록에서 구체적으로 제외하고 싶다면, 당신은 그것을 처리하는 기능을 쓸 수 있습니다.하지만 영어 복수화 규칙은 너무 까다로워서 우선 단어 목록에 복수를 포함시키고 싶습니다.
영어 단어 목록을 어디서 찾을 수 있는지에 대해서는 구글링만으로 "영어 단어 목록"을 여러 개 찾았습니다.여기 하나 있습니다: http://www.sil.org/linguistics/wordlists/english/wordlist/wordsEn.txt 만약 당신이 그 방언들 중 하나를 구체적으로 원한다면 당신은 영국 영어나 미국 영어를 구글에 검색할 수 있습니다.
모든 Linux/Unix 사용자용
OS가 Linux 커널을 사용하는 경우 영어/미국어 사전에서 모든 단어를 가져오는 간단한 방법이 있습니다.디렉터리/usr/share/dict
당신은 가지고 있습니다.words
파일. 또한 더 구체적인 것이 있습니다.american-english
그리고.british-english
파일입니다. 여기에는 해당 언어로 된 모든 단어가 포함되어 있습니다.당신은 모든 프로그래밍 언어를 통해 이것에 접근할 수 있습니다. 그래서 저는 당신이 이것에 대해 알고 싶어할 것이라고 생각했습니다.
이제 python 특정 사용자의 경우 아래의 python 코드는 목록 단어에 모든 단어의 값을 할당해야 합니다.
import re
file = open("/usr/share/dict/words", "r")
words = re.sub("[^\w]", " ", file.read()).split()
file.close()
def is_word(word):
return word.lower() in words
is_word("tarts") ## Returns true
is_word("jwiefjiojrfiorj") ## Returns False
이것이 도움이 되길 바랍니다!
더 빠른 NLTK 기반 솔루션의 경우 단어 집합을 해시하여 선형 검색을 피할 수 있습니다.
from nltk.corpus import words as nltk_words
def is_english_word(word):
# creation of this dictionary would be done outside of
# the function because you only need to do it once.
dictionary = dict.fromkeys(nltk_words.words(), None)
try:
x = dictionary[word]
return True
except KeyError:
return False
저는 이 문제를 해결하기 위한 3가지 패키지 기반 솔루션이 있다는 것을 알게 되었습니다.그것들은 피엔칸트, 워드넷 및 코퍼스(자체 정의 또는 ntlk에서)입니다.py3가 설치된 win64에서는 Pyenchant를 쉽게 설치할 수 없었습니다.워드넷은 말뭉치가 완전하지 않기 때문에 잘 작동하지 않습니다.그래서 저는 @Sadik이 대답한 답을 선택하고 set(단어)를 사용합니다.속도를 높이기 위해 단어를 입력합니다.
첫 번째:
pip3 install nltk
python3
import nltk
nltk.download('words')
그러면:
from nltk.corpus import words
setofwords = set(words.words())
print("hello" in setofwords)
>>True
pyEnchant.checker 맞춤법 검사기 사용:
from enchant.checker import SpellChecker
def is_in_english(quote):
d = SpellChecker("en_US")
d.set_text(quote)
errors = [err.word for err in d]
return False if ((len(errors) > 4) or len(quote.split()) < 3) else True
print(is_in_english('“办理美国加州州立大学圣贝纳迪诺分校高仿成绩单Q/V2166384296加州州立大学圣贝纳迪诺分校学历学位认证'))
print(is_in_english('“Two things are infinite: the universe and human stupidity; and I\'m not sure about the universe.”'))
> False
> True
시맨틱 웹 접근 방식의 경우 RDF 형식의 WordNet에 대해 sparql 쿼리를 실행할 수 있습니다.기본적으로 urllib 모듈을 사용하여 GET 요청을 발행하고 JSON 형식으로 결과를 반환하고 python 'json' 모듈을 사용하여 구문 분석합니다.영어 단어가 아니면 아무 결과도 없을 것입니다.
다른 아이디어로, 당신은 Wiktionary의 API를 조회할 수 있습니다.
마법사 대신 nltk.dll을 사용합니다.마법사는 모호한 결과를 제공합니다.예를 들어, 벤치마크 및 벤치마크의 경우 enchant가 true로 반환됩니다.벤치마크에 대해 false를 반환해야 합니다.
이 txt 파일을 다운로드하십시오. https://raw.githubusercontent.com/dwyl/english-words/master/words_alpha.txt
그런 다음 생성합니다.Set
로 약 가 아닌 .
>>> with open("/PATH/TO/words_alpha.txt") as f:
>>> words = set(f.read().split('\n'))
>>> len(words)
370106
여기서부터는 다음을 사용하여 일정한 시간 내에 존재를 확인할 수 있습니다.
>>> word_to_check = 'baboon'
>>> word_to_check in words
True
이 세트는 포괄적이지는 않지만 작업을 완료할 수 있으므로 사용자는 품질 검사를 수행하여 사용 사례에도 적합한지 확인해야 합니다.
언급URL : https://stackoverflow.com/questions/3788870/how-to-check-if-a-word-is-an-english-word-with-python
'programing' 카테고리의 다른 글
웹팩 4 모듈을 자스민이 멤버를 감시할 수 있도록 구성할 수 있습니까? (0) | 2023.06.11 |
---|---|
JDBC 씬 드라이버에 대한 NLS_LANG 설정? (0) | 2023.06.11 |
Uncaught ReferenceError: 모듈이 build.js:1 vuejs, webpack, SSR(npm 스크립트 로더를 사용했지만 사용하지 않음)에 정의되지 않았습니다. (0) | 2023.06.11 |
VBA 프로젝트의 조건부 컴파일 속성을 프로그래밍 방식으로 변경하는 방법 (0) | 2023.06.11 |
UI 테이블 보기에서 구분선을 제거하는 방법이 있습니까? (0) | 2023.06.11 |