【问题标题】:php proximity script - how to calculate the number of words/characters between 2 given terms/words?php邻近脚本 - 如何计算2个给定术语/单词之间的单词/字符数?
【发布时间】:2012-11-06 05:00:57
【问题描述】:

基本上 - 我想计算各种术语的“接近度”。 我所说的“接近度”具体指的是它们之间的空格/字符/单词的数量。

例子:

术语 = 字 1 / 字 2 块 = "blah Word1 blah blah blah blah blah Word2 blah" 接近度 = Word1-Word2:5 脚本会看到 2 个术语,找到它们,然后根据它们之间的单词查看距离。

更高级的版本是检查语义结构 - 并确定这些术语是否出现在相同的语义元素、同级或父级等中。 因此,术语的邻近发现可以在同一段落内,或在连续段落中,或在同一“父”(标题)下,但以其他方式分开等。

进一步 - 在以后引入诸如词干/关系/发音之类的东西也可能很有用。

.

我浏览了网络(谷歌,这里,php 论坛,php 脚本站点)。 没有看到类似的东西。 我可以在一些类似(有限)的网站上看到工具——通常是基于 SEO 的工具。 我希望能够将其应用于一般的“文本”......因为我可以将其应用于上传的 word/txt 文件等。

我没有看到任何真实的例子——所以我只能假设编写它是一件小事。

问题是 - 我该怎么做? 我将如何处理单词的变体顺序(Word1+Word2 / Word2+Word1)? 我如何处理识别同一元素/结构内部/外部的接近度?

希望有人能提供一些启示/提出一些建议。

【问题讨论】:

  • -dotNetkow- 修订版足够公平 - 但“word”有点通用,也许标志/标签应该设置为“MSWord”或类似的?那 - 或者开始为标签分配“详细”值,这样人们就不会分配被认为不相关的术语
  • 我同意 - 我们有一个对 Word 有意义的“msword”标签。我将编辑两个标签上的“wiki”以澄清。
  • 谢谢 - 这可能会让人们感到困惑,因为有很多可能的词可以使用,还有很多定义/实现。

标签: php proximity


【解决方案1】:

如果您需要对给定文本进行大量此类搜索,您可以首先将整个文本索引到包含单词、其在文本中的位置和段落编号(如果需要)的数据库中。然后,您可以选择所有 Word1 和 Word2 的位置,推断最小距离应该不难。

编辑: 这是一个不使用数据库的简单算法的尝试。

  1. 删除所有 html 和标点符号以仅保留单词
  2. 搜索 Word1 的第一个匹配项
  3. 计算单词(或字符或空格)的数量,直到您到达 Word2 的下一个匹配项
  4. 如果在到达 Word2 之前再次到达 Word1,请重新启动计数器
  5. 记录距离,然后继续重复步骤2-5,得到Word1和Word2的其他出现

【讨论】:

  • 不是一个坏主意,但前提是您必须大量搜索
  • 否则只能索引Word1和Word2,可以是数组而不是数据库。
  • 好的。好吧,我希望能达成“一次性”或“一次性”的交易。将东西添加到数据库只是为了在结果之后丢弃它似乎有点过分。所以读入一个变量/数组可能会达到同样的效果,但只是暂时的。 // 所以我们在看映射每个词的位置(根据位置赋值),然后比较词的位置值(Word1@28,Word2@37,proximity = (37-28) 8.
  • 所以我必须将内容分解为 $var 的块。我想我可以分配多个位置分数……不仅是词序,还有语义/结构位置? // 我不仅需要分解事物 - 还需要确定哪些块是什么,并将事物作为一个“整体”处理(因为我需要查看位置差异是什么,即使它是差异段落),以及作为部分(这样我就可以对兄弟/孩子/父母关系进行评分)。 // 所以 - 问题是 - 怎么做?
  • 所以我必须做什么?请注意我正在寻找的条款。将内容作为 html-stripped 块放入,然后记下相关的位置分数。然后取出原始并将其分解为语义块(可能是嵌套的,或者注意有多深?)。然后我可以使用前面提到的位置分数进行查找,并对它们进行评分? // 有更好的想法吗?我错过了什么吗?
猜你喜欢
  • 2018-03-25
  • 1970-01-01
  • 2017-10-18
  • 1970-01-01
  • 2016-12-06
  • 1970-01-01
  • 1970-01-01
  • 2016-03-31
  • 1970-01-01
相关资源
最近更新 更多