我想知道从输入文本(当用户输入文本时)生成标签云的最佳方法是什么。例如,如果用户键入包含关键字“科幻、技术、效果”的故事文本,标签云将由每个关键字根据它们在每个故事中的频率按相关性排序形成。标签云将按降序显示,并使用相同的字体大小,这不是显示算法,而是我应该实现的搜索算法。 我正在使用 mysql 和 php。 我应该坚持 MATCH...AGAINST 条款吗?我应该实现标签表吗?
更多详情 我有一个包含很多故事的 mysql 表。当用户键入他/她自己的一个时,我想显示一个标签云,其中包含最常用的单词,这些单词取自输入文本,出现在我的数据库中保存的这组故事中。 标签云将仅用于根据这些词在所有用户输入的所有故事中出现的频率向用户显示他/她在他/她自己的故事中输入的词的相关性。
最佳答案
我认为您需要做的第一件事是更清楚地定义标签系统的用途。您想简单地根据文本中出现频率最高的词来构建标签吗?这让我印象深刻,因为它在设计时就考虑到了搜索排名。
...或者您是否希望更好地组织您的内容,并且标签云是一种提供更好的用户体验并在内容片段之间创建更明显的关系的方式(即这些都被标记为科幻,所以将它们显示在科幻类别中)。
如果是前者,您可能不需要做任何事情,除了:
- 用分隔符将文本展开,例如单个空格
explode(' ', $content);
- 有一个列表(可能在配置文件或脚本本身中)您希望从标签中排除的经常出现的词(和,或,this,the 等。您可以将它们从页面中删除像这样:http://www.esldesk.com/vocabulary/pronouns , http://www.english-grammar-revolution.com/list-of-conjunctions.html
然后您只需要决定一个词必须出现多少次(百分比或数字),并将这些标签存储在一个表格中,该表格显示标签和内容之间的联系。
要实现“当用户输入时”部分,您只需要使用一些 jQuery 的 ajax 功能来持续调用构建标签列表的脚本(即在按键时)。
另一个选项(更好的用户体验)将包含很多相同的元素,但您需要考虑更多。我会考虑的一些事情:
- 您想限制某些标签(也许您不想只允许任何人创建新标签)吗?
- 你将如何处理同义词
- 如果您将支持多种语言
- 如果您想优先推荐现有标签(可能接近)而不是推荐新标签
一旦您完全定义了逻辑和用户体验,您就可以回到搜索算法。 MATCH 和 AGAINST 是不错的选择,但您可能会发现一个简单的 LIKE 就可以完成。
祝你好运 = )
关于php - 从输入文本创建标签云的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6728429/