我们有一个包含大型文本区域和几个文本字段的表单。我们还有一个1500个标签的列表(一些有空格),分为5种类型。刮取用户输入的文本以提取他们可能输入的标记的最佳方法是什么。
我们不想给他们一个标记字段 - 它需要自动发生。
有什么想法吗?
答案 0 :(得分:1)
我建议你使用一个可用的自动完成jquery插件(有许多,只是谷歌),每个标签执行一个AJAX请求,返回一个带有类似标签的JSON对象。要做到这一点,你需要建立一个你可以查询的路线;示例:http://mysite.com/tags?s=%s返回JSON。
另一种方法, lazy 方式,考虑到你拥有的标签数量(当然这取决于用户可以查看的内容)是可行的,输出整个标签数组作为嵌入在文档中的JSON对象。我不推荐这个,除非你真的很想解决这个问题而且你不介意加载额外的东西。
标签应以逗号分隔。
提交表单后,您需要添加一个额外的过程来解析给定的标签。只需执行一个tags.split(',')
,您将获得一个标记数组,稍后您可以迭代该数组以将数据插入数据库。
答案 1 :(得分:1)
如果我正确理解您的问题,可以采用以下解决方案:
对于你的目的来说,这将是非常快的,考虑到一个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,遍历数组,对单词进行加权并对它们进行清理。