如何在PHP中实现转发索引呢?

kar*_*m79 11 php indexing parsing

我期待在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. 请记住一个可以构建单词列表的解决方案,而阅读文档的时间比首先需要读取整个文档的文档更酷.

在这个阶段,我并不关心存储的数据.即使是一套基本的"印刷"陈述也足够了.

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

Byr*_*ock 7

看一眼

http://simplehtmldom.sourceforge.net/

你做的事情就像

$p = new Simple_dom_parser();
$p->load("www.page.com");
$p->find("body")->plaintext;
Run Code Online (Sandbox Code Playgroud)

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

foreach ($p->find("a") as $link)
{
    echo $link->innerText;
}
Run Code Online (Sandbox Code Playgroud)

它是非常有用和强大的.看看这个.


Cha*_*rch 5

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

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

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