【问题标题】:How to find key words in paragraph of text?如何在文本段落中找到关键词?
【发布时间】:2019-09-03 08:10:57
【问题描述】:

我正在尝试找到一种快速(毫秒或秒)的解决方案,用于输入文本块和要测试的特定单词/短语的大型列表(1100 万)。所以我想看看输入的段落中有哪些单词/短语?

我们使用 Javascript 并拥有 SQL、MongoDB 和 DynamoDB 作为我们可以将此解决方案集成到其中的现有数据存储。

我已经完成了这个问题的搜索,但只能找到检查文本中是否存在单词。反之亦然。

欢迎所有想法!

【问题讨论】:

  • 如果您发现文本块中存在单词/短语,这是否意味着您已经找到了文本块中的单词/短语? (我不知道为什么I've done searching on this problem but can only find checking if words exist in text. not the other way around. 不能解决你的问题)
  • 例如:假设您的文本输入中有 2500 个字符。那是大约 411 个单词,然后需要与现有的 1100 万单词字典进行比较。那是 45.21 亿次字符串比较。那么我们怎样才能让这更快呢?
  • 嘿!你的问题有什么更新吗?

标签: javascript database caching indexing full-text-search


【解决方案1】:

在这种情况下,您希望尽可能多地消除不必要的数据。假设顺序很重要:

  1. 首先,请确保您有一个基于短语数据库的 B 树索引,该数据库聚集在该短语上。这将加快范围查找时间。
  2. 让n = 2(或 1,如果你喜欢的话)
  3. 将文本块拆分为长度为 n 的短语,并在字典中以任何短语对 ('My Phrase%') 开头的短语执行查询。由于有索引,这不会执行 45.21 亿次字符串比较。
  4. 记住完全匹配的短语
  5. 让n = n + 1
  6. 使用精简字典从第 3 步开始重复,直到精简字典为空

您还可以根据您要查找的匹配类型在这里和那里进行小的优化,例如不匹配标点符号,仅匹配特定字长的短语等。无论如何,我希望这里的时间瓶颈在于磁盘访问,而不是实际比较。

另外,我很确定我是基于现有算法的算法,但我不记得它的名字,所以任何能说出它的人都可以加分。我认为这与数据仓库/挖掘以及计算频率和模式有关?

【讨论】:

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