Ruby中的语法解析

3
我有一个任务需要解析文本的结构——准确来说,是单语词典。该词典的条目相当复杂:最多有29个独特元素,并且一些元素嵌套在其他元素中。我正在为词典设计自己的XML模式,但我想编写一个程序来自动解析我拥有的纯文本。
我具备一些Ruby基础技能,也是一个经验丰富的正则表达式用户,但我认为创建大量的if树和极长的正则表达式公式可能不是最好的方法。我已经找到了一些关于Parsing Expression Grammar、Backus Normal Form和W-grammar的信息,但似乎不太清楚它们适用于哪种情况。
我的问题是:哪种方式最适合解释自然语言中的文本结构?我不想解释语言本身,而是根据字符和关键词以及它们的邻域将每个条目划分为段落。你会建议哪些gem和资源?
编辑:这里有一个较为简单的词典条目(波兰语),点击此处 查看。我想要对每个元素进行标记(意义、解释、搭配、标签等等)。正如您所见,我正在寻找一种有效的方式以树形结构包含大量情况。 另一个问题是,我希望有很多捕获,因为我想将XML中的片段从大到小进行标记。

1
你能发布(或链接)那29个条目吗? 我想我可以为它们编写一个正则表达式。 思路是将所有排列组合都写成字符串。 然后创建一个三进制树形结构到正则表达式的前缀树。 参见此示例 http://www.regexformat.com/default_files/Rx5_ScrnSht01.jpg。虽然它是一个字典,但对于普通字符串也非常有效。 - user557597
嗯,我有更多的条目 - 数以千计,准确地说 - 它们由最多29个不同的元素组成。问题是,并非所有元素都总是存在,它们有时会改变顺序,并且可能会有一个嵌套在另一个条目中。尽管我很感谢你的提议,但我相信对于任何单个正则表达式来说,可能性太多了,效率不高。我在原帖中发布了一些额外的信息。不过,你能解释一下你所说的“将所有排列组合写成字符串”是什么意思吗?即使它的长度可以达到公里级别,也要生成每种可能的组合吗? - MrVocabulary
我不确定我理解你的问题 - 我的目标是什么?我正在数字化波兰历史词典,希望能够获取特定类型的信息(我打算将文本转换为XML,然后将XML转换为具有非常特定查询的数据库,用于语言学研究)。 - MrVocabulary
看起来像是一项艰巨的任务.. - user557597
1
你听起来需要一个解析器;假设你可以为你所拥有的内容编写语法,这并不是非常复杂的。请参考https://dev59.com/v3E95IYBdhLWcg3wlu6z#2336769。 - Ira Baxter
显示剩余7条评论
1个回答

1
这似乎是一个适合使用Treetop的问题。我不确定是否有足够的信息来确保它能够工作,但是能够将正则表达式组合成更大的结构,在其中管理29个元素,并使用Ruby的任何适当功能提取/表示它们的信息,似乎是您需要的功能集。

不能确定,但看起来这可能是正确的方法。一定会尝试一下,谢谢! - MrVocabulary

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接