【问题标题】:How to create templates from html page automatically?如何自动从 html 页面创建模板?
【发布时间】:2011-07-08 08:34:43
【问题描述】:

我有一个用例,我需要在 Java 中以给定网页的格式呈现未格式化的文本。即文本应自动格式化为带有样式、段落、项目符号等的网页。
正如我首先看到的那样,我将不得不分析一段未格式化的文本以找出段落、项目符号、标题等的候选者。我打算使用 Lucene 分析器/标记器来完成这项任务。有其他选择吗?
第二个问题是将格式化的网页转换为某种模板(例如速度模板),其中包含标题、项目符号等各种实体的占位符。
Java中是否有任何文本分析/模板库可以帮助我做到这一点?最好是开源的。
对于在 Java 中以更好的方式完成此类任务还有其他建议吗?

感谢您的帮助。

【问题讨论】:

  • 您是否真的需要在每种情况下使用不同的模板,或者您不能只使用一个模板在解析/拆分后作用于表示文本的模型对象? (所以模板会在页面上循环显示它们,每个页面都会在标题、段落等上循环......)。当然,你真正的问题是分裂。
  • 我需要用户能够选择一个网页并将其指定为他的模板。那么他所有的输入文本都应该像那个网页一样格式化。
  • 网页是由您的应用程序生成的,还是来自其他应用程序?在第一种情况下,您不能对用户选择的页面(使用虚假文本或 Lorem Ipsum)和使用用户提供的内容生成的页面使用相同的模板吗?在第二种情况下,您如何期望知道页面的哪一部分应该对应于用户生成内容的一部分?
  • 网页是在应用程序外部生成的。猜测页面的哪一部分对应哪一部分内容是问题的一部分。
  • 所以你的问题是“Lorem Ipsum Hello World 所以这家伙进入酒吧”没有任何标记/结构;和一个随机站点的 URL(比如“thetimes.co.uk/tto/news/");你应该可以猜到应该使用“Lorem Ipsum”作为主标题,“Hello world”作为第二个标题,并且“所以这个人输入进入酒吧”作为文章内容(加上你应该摆脱所有的广告,其他内容等......)?这对我来说听起来像是 2 个人工智能难题,除非你有某种上下文可以帮助......一旦你解决了 NLP,任何模板技术都可以;)

标签: java lucene velocity template-engine text-analysis


【解决方案1】:

你正在做的事情有很多困难。

用户输入

如果您不要求您的用户提供任何上下文,您将永远猜不到文本的结构。至少,您应该要求他们在您的 GUI 中提供一个标题和一系列段落。

理想情况下,您可以要求他们遵循众所周知的标记语言(Markdown、Textile 等)并使用开源解析器来提取结构。

外部页面

如果使用任何页面,您唯一可以依赖的就是“结构标记”。因此,假设您知道页面的标题应该是“Hello World”,并且页面中的某处有一个“h1”元素,您也许可以假设这就是标题所在的位置。

但是如果页面是一个 div 标签汤,并且只有 CSS 用于区分标题的呈现而不是文本的大部分,你将不得不猜测样式是如何完成的:如果您不知道页面是如何制作的,那是完全不可能的。

我不认为 Lucene 会对此有所帮助(据我所知,Lucene 是用来创建大量文本中使用的单词的索引;我认为它不能帮助您猜测text 是指标题、副标题等...)

从外部页面生成模板

假设你“猜”对了,你可以通过

生成内容
  • 复制粘贴页面
  • 用您选择的模板语言的标签替换要更改的部分
  • 将模板存储在模板系统可以访问的地方
  • 配置您的模板/视图系统(viewResolver for velocity)为正确的人使用正确的模板

这当然会带来可怕的法律问题,因为您的模板会包含原始网站作者的作品(很可能是受版权保护的材料)

更现实的解决方案

我建议您将问题限制在:

  • 使用具有一些可用结构信息的输入(使用 GUI 输入,使用标记语言等)
  • 使用提供的模板,了解其结构(并且可以很容易地重复使用)

请注意,这些点都与模板系统无关。

否则,恐怕你的工作量会不合理......

【讨论】:

    猜你喜欢
    • 2014-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-04
    • 2015-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多