克林贡NLP工具包

yajwiz的Python项目详细描述


yajwI'是一个Klingon NLP工具包,包括基本的标记化、形态分析和词性标记。在

它大量使用boQwI’ dictionary。在

安装

yajwI需要python3.8或更新版本。在

它可以从PyPI安装:

pip install yajwiz

标记化

这个库包含非常简单的标记化。在

^{pr2}$

形态分析

yajwiz.analyze函数解析一个单词并返回一个可能的解析列表和大量额外信息。在

>>> yajwiz.analyze("yInwI'")
[
    {
        'WORD': "yInwI'",
        'POS': 'N',
        'XPOS': 'N',
        'PARTS': ['yIn:n', "-wI':n:suff"],
        'LEMMA': 'yIn',
        'SUFFIX': {'N4': "-wI'"},
        'XPOS_GSUFF': 'N',
        'UNGRAMMATICAL': True
    },
    {
        'WORD': "yInwI'",
        'POS': 'V',
        'XPOS': 'VT',
        'PARTS': ['yIn:v:t_c', "-wI':v:suff"],
        'LEMMA': 'yIn',
        'SUFFIX': {'V9': "-wI'"},
        'XPOS_GSUFF': "VT.wI'"
    }
]

目前,分析器非常宽容,允许使用错误的复数和所有格后缀(例如,yInwI'而不是yInwIj)。它将尝试用'UNGRAMMATICAL': True标记这类错误。它检测到以下错误:

  • 当名词不是人称名词时,使用-pu'-wI'-li'
  • 当名词不是身体部分时使用-Du'
  • 使用-vIS而不使用-taH
  • 使用带有非法动词前缀的-lu'
  • 使用前缀表示宾语的不及物动词
  • 使用-ghach而不使用任何其他动词后缀

还有一个更简单的函数yajwiz.split_to_morphemes,它返回一组字符串元组(通常集中只有一个元组):

>>> yajwiz.split_to_morphemes("yInwI'")
{('yIn', "-wI'")}

词类列表

XPOSExplanation
VSStative verb
VTTransitive verb
VIIntransitive verb
VATransitive and intransitive verb
V?Verb with unknown transitivity
NLPerson noun
NBBody part noun
PRONPronoun (including ‘Iv and nuq: it is a noun that can function as a copula)
NUMNumber
NOther noun
ADVAdverb
EXCLExclamation
CONJConjunction
QUESQuestion word (other than ‘Iv and nuq)
UNKUnknown

CONLL-U文件和POS标记器

CONLL-U文件是一种常用的存储注释语言数据的数据格式。在

yajwI'可以生成充满形态信息的CONLL-U文件(它不支持依赖解析)。在

下面是一个示例脚本,它首先在没有经过训练的POS标记器的情况下解析文本, 然后用它训练POS标记器,最后用标记器解析文本并将结果保存到CONLL-U文件中。在

importyajwizwithopen("prose-corpus.txt","r")asf:text=f.read()conllu=yajwiz.text_to_conllu(text)tagger=yajwiz.Tagger()tagger.train(yajwiz.conllu_to_tagged_list(conllu))conllu=yajwiz.text_to_conllu(text,tagger)withopen("prose-corpus.conllu","w")asf:f.write(conllu)

如果没有经过培训的词性标注者,模糊的单词将不带标记:

# Hegh neH chav qoH.
1   Hegh    _       _       _       _       _       _       _       _
2   neH     _       _       _       _       _       _       _       _
3   chav    _       _       _       _       _       _       _       _
4   qoH     qoH     NOUN    N       _       _       _       _       _
5   .       .       PUNCT   PUNCT   _       _       _       _       _

# qanchoHpa' qoH, Hegh qoH.
1   qanchoHpa'      qan     VERB    V?.pa'  Person=3|ObjPerson=3,0  _       _       _       SuffixV3=-choH|SuffixV9=-pa'
2   qoH     qoH     NOUN    N       _       _       _       _       _
3   ,       ,       PUNCT   PUNCT   _       _       _       _       _
4   Hegh    _       _       _       _       _       _       _       _
5   qoH     qoH     NOUN    N       _       _       _       _       _
6   .       .       PUNCT   PUNCT   _       _       _       _       _

在训练了标记器之后,它将采取“最佳猜测”来决定位置

# Hegh neH chav qoH.
1   Hegh    Hegh    VERB    VT      Person=3|ObjPerson=3,0  _       _       _       _
2   neH     neH     ADV     ADV     _       _       _       _       _
3   chav    chav    VERB    VT      Person=3|ObjPerson=3,0  _       _       _       _
4   qoH     qoH     NOUN    N       _       _       _       _       _
5   .       .       PUNCT   PUNCT   _       _       _       _       _

# qanchoHpa' qoH, Hegh qoH.
1   qanchoHpa'      qan     VERB    V?.pa'  Person=3|ObjPerson=3,0  _       _       _       SuffixV3=-choH|SuffixV9=-pa'
2   qoH     qoH     NOUN    N       _       _       _       _       _
3   ,       ,       PUNCT   PUNCT   _       _       _       _       _
4   Hegh    Hegh    VERB    VT      Person=3|ObjPerson=3,0  _       _       _       _
5   qoH     qoH     NOUN    N       _       _       _       _       _
6   .       .       PUNCT   PUNCT   _       _       _       _       _

在这个例子中,tagger犯了一个错误:它将第一个Hegh归类为VT,尽管它应该是N。我没有正确标记的语料库,因此目前无法评估tagger。:(

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

推荐PyPI第三方库


热门话题
java Android Espresso如何检查字符串是否缩写   java jar从cmd写入文件,但不能双击   Grails中的java onetomany映射|我可以在复合键中使用生成的值吗?   java HttpsURLConnection在尝试添加Cookie时已连接   java在Netbeans中不能有同名的包和类   如何在格式化字段自动更改无效输入(Swing)Java时触发事件   用户输入后java JTextArea未更新   java试图用新字符替换字符串中的特定字符   java类加载器在Linux上显示错误路径   java mySQL远程数据库未连接   java如果接口需要MyObject对象,如何返回错误对象?   java无法解析在MainActivity之外调用安卓类时的符号   java如何将应用程序文件正确添加到appium所需的功能?   Java中浮点数组的数据对齐算法