问题 如何在PHP中实现前向索引呢?


我期待在PHP中实现一个简单的正向索引器。是的,我确实理解PHP不是最好的工具,但无论如何我都想做。它背后的基本原理很简单:我想要一个,在PHP中。

让我们做一些基本的假设:

  1. 整个Interweb由 大约五千个HTML和/或 纯文本文件。每个文档都驻留在特定域中 (UID)。在我们想象中的洞穴间Interweb中没有其他专有/神秘的格式。

  2. 我们真棒的基于PHP的前向索引算法的结果应该是:

    UID1 - > index.html - > helen,她,是,冠军,有雀斑

    UID1 - > foo.html - >鸡,农民,去,回家,吃,羊

    UID2 - > blah.html - > next,week,on,badgerwatch

    UID2 - > gah.txt - > one,one和one,is,not,numberwang

理想情况下,我希望看到解决方案,即使在最基本的时候,也会考虑标记化/字边界消歧/词性标注的概念。 当然,我确实意识到这是一厢情愿的想法,因此将通过以下方式谦虚地解析所述虚构文档的任何有价值的尝试:

  1. 提取文档中的真实文本内容 作为订单中的单词列表 他们被呈现。
  2. 一直以来,无视任何垃圾 如 <script> 和 <html> 用于计算UID列表(可以是例如域)的标签,后跟文档名称(域内的资源),最后是该文档的单词列表。我确实认识到HTML标签在文档中文本的语义位置中起着重要作用,但在此阶段我 不管
  3. 请记住可以构建列表的解决方案 在阅读文档时的单词 那个需要的人比较凉爽 首先阅读整个文档。

在这个阶段,我不关心存储的数量或方法。即使是一套基本的“印刷”陈述也足够了。

在此先感谢,希望这很清楚。


11017
2018-04-27 22:19


起源

+1以获得精彩的示例文本 - Artelius
这是你的作业吗?看起来你只想要一个简单的文件解析器.. - Louis
@Lou Homework?来吧 - karim79
+1 +1 +1 +1 ......那就是数字王 - Dead account


答案:


看一眼

http://simplehtmldom.sourceforge.net/

你做的很像

$p = new Simple_dom_parser();
$p->load("www.page.com");
$p->find("body")->plaintext;

那会给你所有的文字。 想要迭代链接

foreach ($p->find("a") as $link)
{
    echo $link->innerText;
}

它是非常有用和强大的。 一探究竟。


7
2018-04-27 23:46



快速问题:在我们消费并将其转换为倒置索引后,我们是否删除了正向索引中的条目? - Roy Lee


我不认为我对你要做的事情完全清楚,但你可以很容易地得到一个简单的结果:

  1. 运行该页面 整洁 (一个很好的介绍)以确保它将具有有效的HTML。
  2. 抛弃一切(包括) <body>
  3. 逐个浏览文档中的一个字符。
    1. 如果字符是'<',则在看到'>'(跳过HTML)之前不要对以下字符执行任何操作
    2. 如果字符是“单词字符”(字母数字,连字符,可能更多),则将其附加到“当前单词”。
    3. 如果字符是“非单词字符”(标点符号,空格,可能更多),则将“当前单词”添加到前向索引中的单词列表,并清除“当前单词”。
  4. 做到这一点直到你击中 </body>

这真的是关于它,你可能不得不添加一些例外来处理像 <script> 标签(你不想将javascript视为应该被索引的单词),但这应该给你一个基本的前向索引。


5
2018-04-27 22:34



谢谢Chad,这真的很有帮助:) - karim79