Hướng dẫn how do you check if a word is in a dictionary python? - làm thế nào để bạn kiểm tra xem một từ có trong từ điển python không?

184

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Tôi muốn kiểm tra chương trình Python nếu một từ có trong Từ điển tiếng Anh.

Tôi tin rằng giao diện NLTK WordNet có thể là cách để đi nhưng tôi không biết làm thế nào để sử dụng nó cho một nhiệm vụ đơn giản như vậy.

def is_english_word(word):
    pass # how to I implement is_english_word?

is_english_word(token.lower())

Trong tương lai, tôi có thể muốn kiểm tra xem dạng số ít của một từ có trong từ điển không (ví dụ: thuộc tính -> Thuộc tính -> từ tiếng Anh). Làm thế nào tôi sẽ đạt được điều đó?

Hướng dẫn how do you check if a word is in a dictionary python? - làm thế nào để bạn kiểm tra xem một từ có trong từ điển python không?

Salvador Dali

205K142 Huy hiệu vàng687 Huy hiệu bạc746 Huy hiệu Đồng142 gold badges687 silver badges746 bronze badges

Hỏi ngày 24 tháng 9 năm 2010 lúc 16:01Sep 24, 2010 at 16:01

1

Đối với (nhiều) sức mạnh và tính linh hoạt hơn, hãy sử dụng thư viện chính tả chuyên dụng như

>>> 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"]
>>>
2. Có một hướng dẫn, hoặc bạn có thể đi thẳng vào:

>>> 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"]
>>>

>>> 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"]
>>>
2 đi kèm với một vài từ điển (EN_GB, EN_US, DE_DE, FR_FR), nhưng có thể sử dụng bất kỳ từ OpenOffice nào nếu bạn muốn có thêm ngôn ngữ.

Dường như có một thư viện số nhiều gọi là

>>> 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"]
>>>
4, nhưng tôi không biết liệu nó có tốt không.

Đã trả lời ngày 24 tháng 9 năm 2010 lúc 16:26Sep 24, 2010 at 16:26

Hướng dẫn how do you check if a word is in a dictionary python? - làm thế nào để bạn kiểm tra xem một từ có trong từ điển python không?

KatrielkatrielKatriel

117K19 Huy hiệu vàng133 Huy hiệu bạc165 Huy hiệu Đồng19 gold badges133 silver badges165 bronze badges

12

Nó sẽ không hoạt động tốt với WordNet, bởi vì WordNet không chứa tất cả các từ tiếng Anh. Một khả năng khác dựa trên NLTK mà không có Enchant là NLTK's Words Corpus

>>> 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

Đã trả lời ngày 28 tháng 1 năm 2014 lúc 8:38Jan 28, 2014 at 8:38

SadiksadikSadik

4.1057 Huy hiệu vàng51 Huy hiệu bạc89 Huy hiệu Đồng7 gold badges51 silver badges89 bronze badges

5

Sử dụng NLTK::

from nltk.corpus import wordnet

if not wordnet.synsets(word_to_test):
  #Not an English Word
else:
  #English Word

Bạn nên tham khảo bài viết này nếu bạn gặp khó khăn khi cài đặt WordNet hoặc muốn thử các phương pháp khác.

Nickb

58.6K12 Huy hiệu vàng102 Huy hiệu bạc141 Huy hiệu đồng12 gold badges102 silver badges141 bronze badges

Đã trả lời ngày 18 tháng 3 năm 2011 lúc 11:29Mar 18, 2011 at 11:29

Javadisusheel JavadiSusheel Javadi

2.9243 huy hiệu vàng31 Huy hiệu bạc34 Huy hiệu đồng3 gold badges31 silver badges34 bronze badges

6

Sử dụng một bộ để lưu trữ danh sách từ vì tìm kiếm chúng sẽ nhanh hơn:

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

Để trả lời phần thứ hai của câu hỏi, số nhiều sẽ nằm trong một danh sách từ tốt, nhưng nếu bạn muốn loại trừ cụ thể những người đó khỏi danh sách vì một số lý do, bạn thực sự có thể viết một chức năng để xử lý nó. Nhưng các quy tắc đa nguyên của tiếng Anh là đủ khó để tôi chỉ đưa các số nhiều trong danh sách từ để bắt đầu.

Đối với nơi để tìm danh sách từ tiếng Anh, tôi đã tìm thấy một số chỉ bằng cách googling "danh sách từ tiếng Anh". Đây là một: http://www.sil.org/linguistic/wordlist/english/wordlist/wordsen.txt Bạn có thể google cho tiếng Anh của Anh hoặc Mỹ nếu bạn muốn cụ thể một trong những phương ngữ đó.

Đã trả lời ngày 24 tháng 9 năm 2010 lúc 16:12Sep 24, 2010 at 16:12

Kindallkindallkindall

173K34 Huy hiệu vàng268 Huy hiệu bạc300 Huy hiệu đồng34 gold badges268 silver badges300 bronze badges

7

Đối với tất cả người dùng Linux/Unix

Nếu hệ điều hành của bạn sử dụng nhân Linux, có một cách đơn giản để có được tất cả các từ từ từ điển tiếng Anh/Mỹ. Trong thư mục

>>> 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"]
>>>
5, bạn có tệp
>>> 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"]
>>>
6. Ngoài ra còn có một tệp
>>> 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"]
>>>
7 và
>>> 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"]
>>>
8 cụ thể hơn. Chúng chứa tất cả các từ trong ngôn ngữ cụ thể đó. Bạn có thể truy cập điều này trong mọi ngôn ngữ lập trình, đó là lý do tại sao tôi nghĩ rằng bạn có thể muốn biết về điều này.

Bây giờ, đối với người dùng cụ thể Python, mã Python bên dưới nên gán các từ danh sách để có giá trị của mỗi từ:

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

Hi vọng điêu nay co ich!

Đã trả lời ngày 28 tháng 4 năm 2020 lúc 12:09Apr 28, 2020 at 12:09

2

Đối với một giải pháp dựa trên NLTK nhanh hơn, bạn có thể băm các từ để tránh tìm kiếm tuyến tính.

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

Đã trả lời ngày 27 tháng 6 năm 2016 lúc 19:58Jun 27, 2016 at 19:58

EB Abadieb AbadiEb Abadi

4654 Huy hiệu bạc15 Huy hiệu Đồng4 silver badges15 bronze badges

2

Tôi thấy rằng có 3 giải pháp dựa trên gói để giải quyết vấn đề. Chúng là những người thích thú, WordNet và Corpus (tự xác định hoặc từ NTLK). Pyenchant không thể cài đặt dễ dàng trong Win64 với PY3. WordNet không hoạt động tốt vì nó không hoàn thành. Vì vậy, đối với tôi, tôi chọn giải pháp được trả lời bởi @sadik và sử dụng 'set (words.words ())' để tăng tốc.win64 with py3. Wordnet doesn't work very well because it's corpus isn't complete. So for me, I choose the solution answered by @Sadik, and use 'set(words.words())' to speed up.

First:

pip3 install nltk
python3

import nltk
nltk.download('words')

Then:

from nltk.corpus import words
setofwords = set(words.words())

print("hello" in setofwords)
>>True

Đã trả lời ngày 3 tháng 2 năm 2019 lúc 3:53Feb 3, 2019 at 3:53

Yangyoung trẻ YangYoung Yang

991 Huy hiệu bạc4 Huy hiệu đồng1 silver badge4 bronze badges

1

Với pyenchant.checker Spellchecker:

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

Đã trả lời ngày 4 tháng 5 năm 2017 lúc 14:16May 4, 2017 at 14:16

1

Đối với cách tiếp cận web ngữ nghĩa, bạn có thể chạy truy vấn SPARQL chống lại WordNet ở định dạng RDF. Về cơ bản chỉ sử dụng mô -đun Urllib để đưa ra yêu cầu và trả về kết quả ở định dạng JSON, phân tích cú pháp bằng mô -đun Python 'JSON'. Nếu đó không phải là từ tiếng Anh, bạn sẽ không nhận được kết quả.

Như một ý tưởng khác, bạn có thể truy vấn API của Wiktionary.

Đã trả lời ngày 24 tháng 9 năm 2010 lúc 17:28Sep 24, 2010 at 17:28

Burkestarburkestarburkestar

7531 Huy hiệu vàng4 Huy hiệu bạc12 Huy hiệu đồng1 gold badge4 silver badges12 bronze badges

Sử dụng nltk.corpus thay vì bùa mê. Enchant cho kết quả mơ hồ. Ví dụ: đối với Benchmark và Bench-Mark Mark đang trả về đúng. Nó nên cho rằng để trở lại sai cho điểm chuẩn.

Đã trả lời ngày 10 tháng 4 năm 2021 lúc 11:51Apr 10, 2021 at 11:51

Tải xuống tệp txt này https://raw.githubusercontent.com/dwyl/english-words/master/words_alpha.txt

Sau đó, tạo một

>>> 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"]
>>>
9 trong số đó bằng cách sử dụng đoạn mã python sau đây tải khoảng 370k từ không phải là vô hiệu trong tiếng Anh

>>> 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"]
>>>
0

Từ đây trở đi, bạn có thể kiểm tra sự tồn tại trong thời gian không đổi bằng cách sử dụng

>>> 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"]
>>>
1

Lưu ý rằng bộ này có thể không toàn diện nhưng vẫn hoàn thành công việc, người dùng nên thực hiện kiểm tra chất lượng để đảm bảo nó hoạt động cho trường hợp sử dụng của họ.

Đã trả lời ngày 23 tháng 5 lúc 18:19May 23 at 18:19

Hướng dẫn how do you check if a word is in a dictionary python? - làm thế nào để bạn kiểm tra xem một từ có trong từ điển python không?

AyushayushAyush

4242 Huy hiệu vàng8 Huy hiệu bạc22 Huy hiệu đồng2 gold badges8 silver badges22 bronze badges