如何在Python中对日语进行标记化

2020-08-15 03:30:20

在过去的几年里,在NLP项目中有一种受欢迎的趋势,即广泛使用多种语言。然而,即使支持多种语言,也有少数语言往往会被遗漏。其中一个是日语。日语是没有空格的,决定一个单词在哪里结束,另一个单词在哪里开始并不是一件微不足道的事。虽然有高精度的标记器可用,但它们可能很难使用,而且英文文档很少。这是一个简短的Python日语标记化指南,应该足以让您开始将日语支持添加到您的应用程序中。

首先,您需要安装一个记号赋值器和一个字典。在本教程中,我们将使用带undic-lite的浮桥,这两个项目我都坚持。您可以这样安装它们:

Fugashi附带了一个脚本,因此您可以在命令行中对其进行测试。输入一些日语,输出将显示每行一个单词,以及其他信息,如词性。

>;fugashi麩菓子は、麩を主材料とした日本の菓子.。麩フフ麩名詞-普通名詞-一般菓子カシカシ菓子名詞-普通名詞-一般はワハは助詞-係助詞、、。補助記号-読点麩フフ麩名詞-普通名詞-一般をオヲを助詞-格助詞主材シュザイシュザイ主材名詞-普通名詞-一般料リョーリョウ料接尾辞-名詞的-一般とトトと助詞-格助詞しシスル為る動詞-非自立可能。サ行変格連用形-一般たタタた助動詞助動詞-タ連体形-一般日本ニッポンニッポン日本名詞-固有名詞-地名-国のノノの助詞-格助詞菓子カシカシ菓子名詞-普通名詞-一般.。那就是。補助記号-句点状态方程。

EOS代表句子的结尾,尽管fugashi实际上并没有执行句子标记化;在本例中,它只是标志着输入的结束。

现在我们准备开始用Python将纯日语文本转换成单词列表。

这是我们的样本文本。#";Fugashi";是一种主要由麸质制成的日本小吃。麩菓子は、麩を主材料とした日本の菓子=##34;Text=#34;Text=#34;";#标记器对象保存有关字典的状态。Tagger=fugashi.Tagger()WODS=[TAG(Text)中单词的Word表面]Print(*Words)#=>;麩菓子は、麩を主材料とした日本の菓子。

这将打印单词之间插入空格的原始句子。在很多情况下,这就是你需要的全部,但是扶伽希还提供了很多其他信息,比如词性、词汇表、词源类别、发音等等。这些信息都来自日本国家语言语言学研究所(NINJAL)提供的词典UniDic。

Fugashi是MeCab的包装器,MeCab是一个C++日语标记器。MeCab在这里做了所有的艰苦工作,但Fugashi将其包装起来,使其更具Python风格,更易于安装,并澄清了一些常见的错误案例。

您可能想知道为什么默认情况下会包含词性和其他信息。在英语等语言的经典NLP管道中,词性标注是在词性标记之前单独进行的一步。然而,在日语中,了解词性对于获得正确的标记化很重要,因此它们通常作为一项联合任务来解决。这就是为什么日本的标记器经常被称为形态分析器(形態素解析器)。

如果你习惯了像英语这样的语言,关于日语词化的几件事可能会让你大吃一惊。

导入fugashitagger=fugashi.Tagger()Text=";麩を用いた菓子は江戸時代からすでに存在していた。";为标记器中的单词打印(";input:";,text):#Feature是包含所有Unidic信息打印的命名元组(word.Surface,word.feature ure.lema,Sep=";\t";)。

输入:麩を用いた菓子は江戸時代からすでに存在していた。麩麩をを用い用いるたた菓子菓子はは江戸エド時代時代からからすでに既に存在存在し為るててい居るたた.。那就是。

您可以看到,用い使用用いる作为引理,し使用為る,い使用居る,这两个词同时处理词形变化和正字法变化。すでに没有词尾变化,但词条使用汉字形式既に。

这些词条来自UniDic,按照惯例,UniDic使用词典形式的单词来表示词条。这在汉字中是典型的,即使这个词通常不是用汉字写的,因为汉字形式被认为不那么模棱两可。例如,この(这件事)把此の作为词条,尽管正常的现代写作从来不会使用这种形式。上例中的為る也是如此。

如果你不熟悉日语,这可能会让你大吃一惊,但这不是问题。但是,如果您的应用程序曾经出于任何原因向您的用户显示词条,这一点值得记住,因为它可能不是他们期望的形式。

另一件要记住的事情是,日语中的大多数词条都处理的是正字法而不是词形变化。这种正字法变体被称为hyoukiyure&34;,造成的问题类似于英语中的拼写错误。

动词的任何词形变化都会产生多个记号。这也会影响形容词的屈折变化,比如赤い。您可以在上一个示例末尾的动词中看到这一点,或者在这个更紧凑的示例中看到这一点:

输入:見た(";LOOK";或";SAW";)输出:見ミミル見る動詞-非自立可能上一段-マ行連用形-一般たタタた助動詞助動詞-タ終止形-一般。

这就好比如果“外貌”在英语中被标记化为“外貌”和“外貌”。即使是以日语为母语的人也会觉得奇怪,但这在所有现代代名词中都很常见。主要原因是动词词尾变化非常规则,因此在字典中分别注册动词词干和动词部分会使字典维护变得更容易,并且标记器实现也会更简单、更快。它在罕见的未知动词showsup的情况下也表现得更好。(动词在日语中是一个封闭的类别,这意味着新的动词不常见。)。

在90年代早期,有几个标记器直接处理动词词法,但是随着时间的推移,这种方法已经被抛弃了,因为细粒度方法的上述优点。根据您的应用程序需要,您可以使用一些简单的规则将动词部分组合在一起,或者直接丢弃非词干部分作为停用词。

这已经足够快了,你一次调用都不会注意到它,但是创建标记器对计算机来说是一项很大的工作。在循环处理文本时,重要的是要重用标记器,而不是为每个输入创建新的标记器。

#不要对文本中的文本执行此操作:tagger=fugas hi.Tagger()words=tagger(Text)#对文本中的文本执行此操作adtagger=fugas hi.Tagger():words=tagger(Text)。

如果您使用标记化的日语文本发布资源,请务必注意您使用的标记器和字典,以便复制您的结果。说你使用了MeCab是不足以重现你的结果的,因为有很多不同的MeCab字典可以给出完全不同的结果。即使你指定了字典,你也要指定版本,因为像UniDic这样的流行字典可能会随着时间的推移而更新。如果你想了解更多,可以阅读我关于日语记号词典的文章。

希望这足以让你开始象征化日语。如果您有问题,请随时提交问题或与我联系。我很高兴在时间允许的情况下帮助解决开源项目,而对于商业项目,您可以聘请我直接处理集成。Ψ