用于单词屈折变化的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
并直接调用它们。getAllinSelections
将infl.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