【问题标题】:Dbpedia extraction framework - how to strip mediawiki formatting markupDbpedia 提取框架 - 如何剥离 mediawiki 格式标记
【发布时间】:2011-03-04 15:40:03
【问题描述】:

我正在使用 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 解析的最终结果仍然充满了标记。

希望对您有所帮助。

【问题讨论】:

  • 有趣的问题。假设您不介意从 Scala 调用 Java 库,我已经大胆地添加了 Java 标记。祝你好运!
  • 为了帮助您获得答案,您可以粘贴一些您尝试转换为纯文本的文本节点内容的有意义的 sn-p。另外,您将它放入什么确切的对象/结构中?它是特定于 dbpedia 的结构还是 java?如果是 dbpedia,您可以提供指向 javadoc 的链接。
  • @huynhjil,我正在遍历(以及我已经创建)的来自 dbpedia 的数据结构总结如下:wiki.dbpedia.org/DeveloperDocumentation/WikiParser?v=hdy。 Javadoc 详细信息已链接到此页面。

标签: java scala dbpedia mediawiki-templates


【解决方案1】:

因此,快速浏览一下 sourceforge 上的 SimpleWikiParser source code 表明,截至 2011 年 1 月 29 日,解析器处理以下实体:

  • cmets
  • 参考文献
  • 代码块
  • 内部链接和外部链接
  • 属性
  • 桌子。

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

有关您可以利用的替代方案或代码,请查看以下Alternate Parsers 页面。

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

【讨论】:

  • 感谢您对此进行调查。我查看了备用解析器,但它们大多看起来像是中止的不完整项目。鉴于 Mediawiki 标记解析的主要规范可能是原始的 php 解析器。我希望 dbpedia 需要为他们的目的完全掌握荨麻——但我想他们目前并不依赖主要文章正文作为其语义信息的主要来源......看起来我需要去独立但不完美。
【解决方案2】:

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

【讨论】:

  • 啊。非常好。感谢这个指针。它可能会帮助我整理一些相当不愉快的代码。
【解决方案3】:

您可以通过使用 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)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-08
    相关资源
    最近更新 更多