微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 MeCab 在 vb.net 中将日语句子分成词而不是词素

如何解决使用 MeCab 在 vb.net 中将日语句子分成词而不是词素

我使用以下代码将日语句子拆分为单词:

        Dim parameter = New MeCabparam()
        Dim tagger = MeCabTagger.Create(parameter)

        For Each node In tagger.ParsetoNodes(sentence)

            If node.CharType > 0 Then
                Dim features = node.Feature.Split(",")
                Console.Write(node.Surface)
                Console.WriteLine(" (" & features(7) & ") " & features(1)) 
            End If
        Next

それに応じて大きくになります。 的输入输出语素:

それ (それ) 代名詞
に (に) 格助詞
応じ (おうじ) 自立
て (て) 接続助詞
大きく (おおきく) 自立
に (に) 格助詞
なり (なり) 自立
ます (ます) *
。 (。) 句点

而不是像这样的话:

それ
に
応じて
大きく
に
なります
。

有没有办法可以使用参数让 MeCab 输出后者?我对编码很陌生,所以如果你能简单解释一下,我将不胜感激。谢谢。

解决方法

这实际上很难做到。 MeCab、KuromojiSudachiKyTeaRakuten-MA——所有这些日语解析器和它们使用的词典数据库(IPADIC、UniDic、Neologd 等)都选择了解析词素,即意义的最小单位,而不是您所谓的“词”,正如您的示例所示,词素通常包含多个词素。

有一些策略,通常人们结合以改善这一点。

  1. 尝试使用不同的词典。我注意到 UniDic 有时比 IPADIC 更一致。
  2. 使用像 J.DepP 这样的 bunsetsu 分块器,它使用 MeCab 的输出将语素分块成 bunsetsu。根据 this paper,“我们使用 bunsetsu 的概念,它大致对应于英语中的最小短语,由内容词(基本上是名词或动词)和围绕它们的功能词组成。 ”通过J.DepP输出bunsetsu通常对应于“字”。我个人不认为,比如说,名词 + 助词短语是一个“词”,但你可能会认为——这两个通常在一个 bunsetsu 中。 (J.DepP 也很花哨,因为它还输出了 bunsetsu 之间的依赖树,因此您可以看到哪个修改了哪个修改了另一个,或者哪个是次要的。参见 my example。)
  3. 最后一项您不应忽视的技术是扫描字典 (JMdict) 以查找相邻语素的运行;这有助于找到习语或固定短语。它可能会变得复杂,因为字典中可能在您的句子中有一个短语的解共轭形式,因此您可能必须搜索文字句子形式 MeCab 输出的解共轭(引理)形式。立>

我有一个开源包,它结合了上述所有内容,称为 Curtiz:它通过 MeCab 运行文本,使用 J.DepP 将它们分块成 bunsetsu 以查找属于一起的语素组,通过查找识别词汇它们在字典中,分离粒子和共轭短语等。它可能对你没有用,因为我用它来支持我学习日语和制作日语学习工具的活动,但它显示了上述部分如何结合起来得到你在日语 NLP 中需要的东西。

希望这会有所帮助。我很高兴就上述任何主题进行详细说明。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。