如何解决使用 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、Kuromoji、Sudachi、KyTea、Rakuten-MA——所有这些日语解析器和它们使用的词典数据库(IPADIC、UniDic、Neologd 等)都选择了解析词素,即意义的最小单位,而不是您所谓的“词”,正如您的示例所示,词素通常包含多个词素。
有一些策略,通常人们结合以改善这一点。
- 尝试使用不同的词典。我注意到 UniDic 有时比 IPADIC 更一致。
- 使用像 J.DepP 这样的 bunsetsu 分块器,它使用 MeCab 的输出将语素分块成 bunsetsu。根据 this paper,“我们使用 bunsetsu 的概念,它大致对应于英语中的最小短语,由内容词(基本上是名词或动词)和围绕它们的功能词组成。 ”通过J.DepP输出bunsetsu通常对应于“字”。我个人不认为,比如说,名词 + 助词短语是一个“词”,但你可能会认为——这两个通常在一个 bunsetsu 中。 (J.DepP 也很花哨,因为它还输出了 bunsetsu 之间的依赖树,因此您可以看到哪个修改了哪个修改了另一个,或者哪个是次要的。参见 my example。)
- 最后一项您不应忽视的技术是扫描字典 (JMdict) 以查找相邻语素的运行;这有助于找到习语或固定短语。它可能会变得复杂,因为字典中可能在您的句子中有一个短语的解共轭形式,因此您可能必须搜索文字句子形式和 MeCab 输出的解共轭(引理)形式。立>
我有一个开源包,它结合了上述所有内容,称为 Curtiz:它通过 MeCab 运行文本,使用 J.DepP 将它们分块成 bunsetsu 以查找属于一起的语素组,通过查找识别词汇它们在字典中,分离粒子和共轭短语等。它可能对你没有用,因为我用它来支持我学习日语和制作日语学习工具的活动,但它显示了上述部分如何结合起来得到你在日语 NLP 中需要的东西。
希望这会有所帮助。我很高兴就上述任何主题进行详细说明。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。