如何用 Python 检查一个单词是否是英文单词?

2025-01-14 08:50:00
admin
原创
123
摘要:问题描述:我想要用 Python 程序检查某个单词是否存在于英语词典中。我相信 nltk wordnet 接口可能是可行的方法,但我不知道如何使用它完成如此简单的任务。def is_english_word(word): pass # how to I implement is_english_wor...

问题描述:

我想要用 Python 程序检查某个单词是否存在于英语词典中。

我相信 nltk wordnet 接口可能是可行的方法,但我不知道如何使用它完成如此简单的任务。

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

is_english_word(token.lower())

将来,我可能想检查某个单词的单数形式是否在字典中(例如,属性 -> 属性 -> 英文单词)。我该如何实现?


解决方案 1:

为了获得 (更多) 功能和灵活性,请使用专用的拼写检查库,例如PyEnchant。这里有一个教程,或者你可以直接开始学习:

>>> 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 词典。

似乎有一个名为的复数库inflect,但我不知道它是否有用。

解决方案 2:

它与 WordNet 配合得不好,因为 WordNet 不包含所有英文单词。另一种基于 NLTK 而不使用 enchant 的方法是 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

解决方案 3:

使用NLTK

from nltk.corpus import wordnet

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

如果您在安装 wordnet 时遇到困难或者想尝试其他方法,您应该参考这篇文章。

解决方案 4:

使用集合来存储单词列表,因为查找它们会更快:

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 如果您想要其中一种方言,您可以谷歌搜索英式英语或美式英语。

解决方案 5:

对于所有 Linux/Unix 用户

如果您的操作系统使用 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

希望这有帮助!

编辑:如果您找不到该words文件或类似内容,请参阅下面菲尔博士的评论。

解决方案 6:

我发现有 3 个基于包的解决方案可以解决这个问题。它们是 pyenchant、wordnet 和 corpus(自定义或来自 ntlk)。Pyenchant 无法在win64 上使用 py3轻松安装。Wordnet 工作得不是很好,因为它的语料库不完整。所以对我来说,我选择了 @Sadik 回答的解决方案,并使用 'set(words.words())' 来加速。

第一的:

pip3 install nltk
python3

import nltk
nltk.download('words')

然后:

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

print("hello" in setofwords)
>>True

解决方案 7:

为了获得更快的基于 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

解决方案 8:

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

解决方案 9:

以上库都不包含所有英文单词,因此我从链接导入了一个包含所有英文单词的 csv 文件:-->
https://github.com/dwyl/english-words

然后简单地把它变成一个pandas dataframe并进行比较

解决方案 10:

对于语义网方法,您可以对 RDF 格式的 WordNet 运行 sparql 查询。基本上只需使用 urllib 模块发出 GET 请求并以 JSON 格式返回结果,使用 python“json”模块进行解析。如果不是英文单词,您将得不到任何结果。

另一个想法是,您可以查询Wiktionary 的 API。

解决方案 11:

使用 nltk.corpus 而不是 enchant。Enchant 给出的结果不明确。例如:对于 benchmark 和 benchmark-mark enchant 返回 true。它应该假设对于 benchmark 返回 false。

解决方案 12:

下载此 txt 文件https://raw.githubusercontent.com/dwyl/english-words/master/words_alpha.txt

然后Set使用以下 Python 代码片段创建一个,该代码片段加载约 370k 个非字母数字英文单词

>>> with open("/PATH/TO/words_alpha.txt") as f:
>>>     words = set(f.read().split('
'))
>>> len(words)
370106

从现在开始,你可以使用以下方法在恒定时间内检查是否存在

>>> word_to_check = 'baboon'
>>> word_to_check in words
True

请注意,这套工具可能并不全面,但仍然可以完成工作,用户应该进行质量检查以确保它也适用于他们的用例。

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2545  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1551  
  建筑工程全生命周期涉及从项目规划、设计、施工到运营维护等多个复杂阶段,每个阶段都产生和依赖大量信息。PLM(产品生命周期管理)系统作为一种整合数据、流程和人员的数字化解决方案,正逐渐成为建筑行业实现高效协同与可持续发展的关键支撑。通过数字化转型,PLM系统能够优化各阶段的工作流程,提升项目整体质量和效率,为建筑工程的全...
plm是什么软件   1  
  产品生命周期管理(PLM)系统在企业资源成本率优化方面发挥着至关重要的作用。通过构建有效的数据模型,PLM系统能够整合企业各个环节的数据,为资源成本的精准分析和优化提供有力支持。这不仅有助于企业降低成本,还能提升产品质量和市场竞争力。PLM系统概述PLM系统是一种用于管理产品从概念设计到退役全生命周期过程中所有信息和流...
PLM项目管理软件   1  
  产品生命周期管理(PLM)系统在现代企业的产品研发、生产与管理过程中扮演着至关重要的角色。它整合了从产品概念设计到产品退役的全生命周期数据与流程,助力企业提升效率、降低成本并增强创新能力。随着技术的不断发展,到 2025 年,PLM 系统将具备一系列核心功能模块,这些模块将深度影响企业的运营与发展。产品数据管理模块产品...
plm是什么意思   0  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用