词缀库
dclua的Python项目详细描述
declensor库
使用dclua.py
库可以训练declension模型和declension单词。这只会替换单词的后缀,以对应您希望单词具有的新形态属性。这里有一些主题可以帮助你理解它是如何工作的。
形态向量
形态向量是决定词素形态特征的向量。每个坐标上的数字决定一些属性。你可以用你的向量来表达你的语言,但这里有一个结构,建议用在乌克兰语。
名词向量
名词向量有两个坐标:[number][case]
。这是表格,每一个值的意思是什么。
Coordinate | Number | Case |
---|---|---|
0 | Nominative | |
1 | Singular | Genitive |
2 | Plural | Dative |
3 | Accusative | |
4 | Instrumental | |
5 | Locative | |
6 | Vocative |
不定式后缀放在[0][0]
。
动词向量
名词向量有4个坐标:[tense][person][number][gender]
。
Coordinate | Tense | Person | Number | Gender |
---|---|---|---|---|
0 | First | Singular | Masculine | |
1 | Present | Second | Plural | Feminine |
2 | Future | Third | Neutral | |
3 | Past |
不定式后缀放在[0][0][0][0]
。
形容词向量
名词向量有3个坐标:[gender][number][person]
。
Coordinate | Gender | Number | Person |
---|---|---|---|
0 | Singular | First | |
1 | Masculine | Plural | Second |
2 | Feminine | Third | |
3 | Neutral |
不定式后缀放在[0][0][0]
。
递减规则
declension规则是一个包含declensed后缀的多维数组,它使用morphology vectors索引。您可以用这种方式为您的单词创建这样的模型:
rule=dclua.DeclenseTrainer.analyze({(0,0):'усмішка',(1,0):'усмішка',(1,1):'усмішки',(1,2):'усмішці',#...(2,6):'усмішки'});
现在规则如下:
rule[0][0]=='ка'rule[1][0]=='ка'rule[1][1]=='ки'rule[1][2]=='ці'#...rule[2][6]=='ки'
每个单词都有其后缀,因此您需要为每个单词创建规则以便将来使用。
analyze
方法还接受minsize
参数,该参数确定最小生成后缀的大小。
单词递减
一旦你有了不同后缀的model(bundle of rules),你就可以用它们来拒绝单词。语法如下:
Declensor.declense(str word, tuple newmporph, tuple morphology=None)
假设,您有model
变量,它包含我们想要的所有后缀的模型。然后您可以按以下方式拒绝单词:
>>>dcl=dclua.Declensor(model)>>>dcl.declense('сонцю',(1,1))<<<'сонця'
给定单词的词法向量将被自动识别,因此在models
中找到合适的词法向量模型可能需要一段时间。如果您已经知道要删除的单词的词形,请将其赋给morphology
参数:
>>>dcl=dclua.Declensor(model)>>>dcl.declense('сонцю',(1,1),morphology=(1,2))<<<'сонця'
训练您的模型
为了训练您的模型,您可以使用这个目录中template.py
中的模板。
推广模型
有时模型中的后缀可能会出现微小的变化。例如,aab
,aac
:只有最后一个字母是不同的。您可以设置字母组(在这种情况下可能会有所不同),并根据这些字母组推广您的模型。使用示例:
>>>dclua.DeclenseTrainer.generalizeModel(...model=[...[["она"],["они"],["онів"]],...[["ова"],["ови"],["овів"]],...],...groups=[...["н","в","п","м"]...],...threshold=.3...)...<<<[...[...[['она'],['они'],['онів']],...[['ова'],['ови'],['овів']],...[['опа'],['опи'],['опів']],...[['ома'],['оми'],['омів']]...]...]
阈值参数是规则数量与该组大小的比值,可以推广到某个组。默认情况下,它等于.3
,因此如果有少于.3 * size_of_group
的规则,它们就不会被泛化。