你如何刮字段进行自动标记?

时间:2011-05-28 14:53:36

标签: javascript jquery ruby-on-rails ruby

我们有一个包含大型文本区域和几个文本字段的表单。我们还有一个1500个标签的列表(一些有空格),分为5种类型。刮取用户输入的文本以提取他们可能输入的标记的最佳方法是什么。

我们不想给他们一个标记字段 - 它需要自动发生。

有什么想法吗?

4 个答案:

答案 0 :(得分:1)

前端明智:

我建议你使用一个可用的自动完成jquery插件(有许多,只是谷歌),每个标签执行一个AJAX请求,返回一个带有类似标签的JSON对象。要做到这一点,你需要建立一个你可以查询的路线;示例:http://mysite.com/tags?s=%s返回JSON。

另一种方法, lazy 方式,考虑到你拥有的标签数量(当然这取决于用户可以查看的内容)是可行的,输出整个标签数组作为嵌入在文档中的JSON对象。我不推荐这个,除非你真的很想解决这个问题而且你不介意加载额外的东西。

标签应以逗号分隔。

后端明智:

提交表单后,您需要添加一个额外的过程来解析给定的标签。只需执行一个tags.split(','),您将获得一个标记数组,稍后您可以迭代该数组以将数据插入数据库。

答案 1 :(得分:1)

如果我正确理解您的问题,可以采用以下解决方案:

  1. 在应用程序加载时,使用所有标记构建一个Set。
  2. 当用户发布文本时,遍历所有单词并针对Set进行检查。
  3. 对于你的目的来说,这将是非常快的,考虑到一个Set需要恒定的时间。

    如果您的代码集中包含某个字词,请将该字词添加到新的字词集中。完成所有单词的迭代后,执行数据库查询以将新标记与上载的文本相关联。

答案 2 :(得分:0)

好吧,如果我理解这一点。

您可以使用正则表达式,但在使用1500个可匹配的结果时,我不确定它的效率(如果您可以在单个正则表达式语句中定义多个标记,那将很好)。

for(var index = 0; index < textAreas.length; index++)
{
    textAreas[index].innerHTML.match(new Regex("/" + tags + "/", g));  //will return an array of the found tags.
}

//Where Tags is in the format tag1|tag2|tag3
//Where tagN can be a regex that matches multiple tags in your list.

答案 3 :(得分:0)

我不会编辑我之前的答案,因为这是一个完全不同的方法;并且编辑它意味着重新制作它,考虑到答案可能对某人有用,这是一个坏主意。

制作“自动标记”的一种方法,就是你永远不会告诉你的人写一个关键字,就是解析知道上下文的内容(例如,如果你的人会写关于自行车,你需要避免忽略这些词。)

首先是内容:

  • 删除代词
  • 删除常用名称(不相关)
  • 删除连词
  • 删除介词
  • 删除地址(但接受链接的字词)
  • 拆分剩余单词中的所有单词,并根据外观对其进行加权。
  • 为标题标签上显示的字词提供更多权重。

这应该在后端完成;因为你很可能会做很多准备。在特殊点删除HTML,遍历数组,对单词进行加权并对它们进行清理。