用于单词屈折变化的python模块,设计用于spacy。

pyinflect的Python项目详细描述


皮因克特

一个用于单词屈折变化的python模块,用作spacy扩展

此模块设计为spacy的扩展,并将根据提供的penn treekbank部分语音标记返回单词的屈折形式。它也可以在spacy之外使用一个独立的模块。它基于自动生成的屈折变化数据库(agid)。agid数据提供了各种词引理的屈折变化列表。请参阅scripts目录,以获取制作好示例的实用程序,或参阅tests目录,以获取单元测试/示例。

安装

pip3 install pyinflect

作为Spacy的扩展使用

要与Spacy一起使用,您需要Spacy版本2.0或更高版本。1.9及更早版本不支持此处使用的扩展方法。

要用作Spacy的扩展,请首先导入模块。这将为每个spacytoken创建一个新的inflect方法,该方法使用一个penn treebank标记作为参数。该方法根据提供的treekbank标记返回令牌引理的屈折形式。

> import spacy
> import pyinflect
> nlp = spacy.load('en_core_web_sm')
> tokens = nlp('This is an example of xxtest.')
> tokens[3]._.inflect('NNS')
examples

当给定标记存在多个拼写/表单时,可以提供可选的表单号,否则返回第一个。

> tokens[1]._.inflect('VBD', form_num=0)
was
> tokens[1]._.inflect('VBD', form_num=1)
were

当您希望屈折的引理不在查找字典中时,该方法返回none。可选参数屈折变化可以使用常规屈折变化规则对单词进行屈折变化。在本例中,form_num=0选择"regular"词形变化,form_num=1选择动词的"double"版本,名词的"adj/adv"或"greco拉丁语"。

> tokens[5]._.inflect('VBG', inflect_oov=True)
xxtesting
> tokens[5]._.inflect('VBG', inflect_oov=True, form_num=1)
xxtestting

你需要弄清楚你要用哪种形式。pyinlect.inflectionrules中有一些基本的helper函数,它们可以猜测引理是使用"double"还是"greco latin"样式的规则。

独立使用

要使用独立的,导入方法getAllinSelections和/或getInflection并直接调用它们。getAllinSelectionsinfl.csv文件中的所有条目作为屈折形式字典返回,其中每个表单条目是一个元组,对于给定的treebank标记有一个或多个拼写/形式。可选参数pos_type(v、a或n)可用于将返回的数据限制在特定的语音部分。方法获取引理和penn treebank标记,并返回与之相关的特定屈折变化的元组。

> from pyinflect import getAllInflections, getInflection
> getAllInflections('watch')
{'NN': ('watch',), 'NNS': ('watches',), 'VB': ('watch',), 'VBP': ('watch',), 'VBD': ('watched',), 'VBN': ('watched',), 'VBG': ('watching',), 'VBZ': ('watches',)}

> getAllInflections('watch', pos_type='V')
{'VB': ('watch',), 'VBP': ('watch',), 'VBD': ('watched',), 'VBN': ('watched',), 'VBG': ('watching',), 'VBZ': ('watches',)}

> getInflection('watch', tag='VBD')
('watched',)

方法getinflection接受参数inflectv并使用类似于上面描述的spacy的方法。

> getInflection('xxtest', 'VBG', inflect_oov=True)
('xxtesting', 'xxtestting')

问题:

如果发现错误,请在github问题列表中报告。但是要注意,在返回正确的屈折变化时,可能会出现许多不同类型的问题。有些是不容易修复的。屈折形式的问题包括…

  • 屈折变化的多重拼写法(如。关节成形术,关节成形术或关节成形术)
  • 质量形式和复数类型(即人与人)
  • 依赖于上下文的形式(如…进一步与进一步)
  • 标签未完全指定的感染(即…be/vbd可以是"was"或"was")
  • 来自Spacy的不正确的元素化(即。讨厌->;帽子')
  • 标记不正确(即vbn与vbd)
  • agid数据库中的错误

为了确保pyinsect返回给定标记最常用的屈折形式/拼写,使用了一种语料库技术。在scripts/12_createOverridesList.py中,单词are变为网纹,标记为痉挛,然后用脓性变重新弯曲。当原始的语料库单词与pyinflect不同时,最常见的形式是写入overrides.csv文件。这项技术还可以帮助克服来自agid数据库中的空间和错误的元素化和标记问题。文件corpMultiinfls.txt是来自语料库中多个单词的屈折变化/标记的列表,因此可能有问题。

一个常见的问题是,某些形式的动词"be"并没有完全由treekbank标记指定。例如be/vbd屈折为"was"或"was",be/vbp屈折为"am"或"are"。当屈折形式不明确时,默认情况下会返回第一个形式。在spacy屈折方法中设置form num允许返回其他表单。

请注意,agid数据是由第三方创建的,而不是在这里维护的。有些引理不在数据文件infl.csv中,因此不能使用字典方法进行屈折。在某些情况下,agid可能不包含单词的最佳屈折变化。例如,带有标记"nns"的引理"people"将返回"peoples"(预覆盖),其中您可能希望"people"一词也是复数形式。

标签:

模块确定由pos_type或penn treebanktag返回的屈折变化。词类分别是动词、形容词、副词或名词的v、a或n。treebank标签列表可以在这里找到。并不是所有这些都被pyinsect使用。下面是使用的各种类型和标记的列表…

pos_type = 'A'
* JJ      Adjective
* JJR     Adjective, comparative
* JJS     Adjective, superlative
* RB      Adverb
* RBR     Adverb, comparative
* RBS     Adverb, superlative

pos_type = 'N'
* NN      Noun, singular or mass
* NNS     Noun, plural

pos_type = 'V'
* VB      Verb, base form
* VBD     Verb, past tense
* VBG     Verb, gerund or present participle
* VBN     Verb, past participle
* VBP     Verb, non-3rd person singular present
* VBZ     Verb, 3rd person singular present
* MD      Modal

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java在ArrayList中比较数字   java在Kotlin中使异步调用同步   让“Scala编程”junit示例在IntelliJ中工作的java问题   java Servlet侦听器未在ContextListener中设置属性   将Microsoft SQL Server数据库连接到我的Java项目   加载资源时出现java“需要注册工厂”异常   java如何使用POI检查excel中的重复记录?   java如何更改机器生成的代码   java如何确保重写的方法是同步的   用Spring编写Hibernate时的java XML奥秘   java管理mysql数据库中存储的用户权限   java如何运行。来自Javascript的jar方法   java我想在Web应用程序中进行身份验证&对桌面应用程序使用相同的凭据。我该怎么做?