3

我正在玩 dbpedia 提取框架。看起来很不错,我很高兴构建维基百科页面的 AST 并提取链接(使用 WikiParser)。然而,虽然我从解析中得到了一个很好的结构化树,但我注意到文本节点仍然包含许多格式标记(例如,用于斜体、粗体等的撇号)。出于我的目的,这些没有帮助 - 我只想要纯文本。

我可以花一些时间编写自己的代码来删除它,但我假设这样的东西对 dbpedia 很有用 - 并且它存在于库中的某个地方。我对吗?如果是这样 - 剥离到裸文本的额外功能在哪里?

否则 - 有没有人知道任何其他(最好是 scala)包来去除 mediawiki 标记?

编辑

应要求提供更多详细信息。以下标记:

''An italicised '''bit''' of text'', <b>Some markup</b>

来自 dbpedia 作为 TextNode 的内容,但未触及。我希望能够将其剥离为:

 An italicised bit of text, Some markup

或者可能是一个更结构化的 AST,其附加节点表示原始文本的每个部分,可能(在每个节点上)用要应用的格式类型(例如斜体、粗体等)进行注释。

事实上,dbpedia 解析的最终结果仍然充满了标记。

希望有帮助。

4

3 回答 3

2

因此,快速查看 sourceforge 上的SimpleWikiParser 源代码表明,截至 2011 年 1 月 29 日,解析器处理以下实体:

  • 评论
  • 参考
  • 代码块
  • 内部链接和外部链接
  • 特性
  • 表。

大概所有 wiki 其他内容都以TextNode对象结尾。查看wiki 标记功能集,剥离 wiki 语法元素需要大量工作,更不用说将它们进一步转换为结构化元素。

有关您可以利用的替代方案或代码,请查看以下备用解析器页面。

对于一个自包含但不完美的解决方案,您可以执行一堆正则表达式替换node.text

于 2011-03-04T21:51:54.653 回答
1

gwtwiki ( bliki ) 项目处理 mediawiki 格式 -> pdf/html/等。它是一个用于解析和重新格式化 mediawiki 文本的相当完整的框架。

于 2011-04-08T17:43:13.500 回答
0

您可以通过使用 WikiUtil.removeWikiEmphasis 并添加一些额外规则来启动此过程。

在我的例子中,我将文本映射到 toWikiText 并将节点链接到它们的目标名称。

case text:TextNode => text.toWikiText
case link:LinkNode => {
link match {
   case external:ExternalLinkNode =>  (external.destination.toString)
   case internal:InternalLinkNode =>  (internal.destination.decodedWithNamespace)
   case inter:InterWikiLinkNode   =>  (inter.destination.decodedWithNamespace)
}
于 2011-08-09T23:27:29.470 回答