删除所有行中出现的类似字符

时间:2011-07-11 21:52:48

标签: php javascript mysql

所以我有一个包含两列“title”和“url”的表。行如下:

Title                              url

    Galago - Wikipedia                  http://en.wikipedia.org/wiki/Galago         
    Characteristics - Wikipedia          http://en.wikipedia.org/wiki/Galago
    Classification - Wikipedia           http://en.wikipedia.org/wiki/Galago
    Myst- Gamestop                       http://www.gamestop.com/ds/games/myst/69424
    Plot- Gamestop                       http://www.gamestop.com/ds/games/myst/69424

我的问题是,我如何从某个网址中删除所有行中的常用字符(删除 - 前三个中的维基百科,以及另外两个中的Gamestop)。这只是一个小例子....我有许多其他行具有相同的模式(它们具有共同的字符,单词,在某个URL的所有行中重复出现)。我想补充一点,我将这些值存储在javacript数组

3 个答案:

答案 0 :(得分:1)

如果所有字符串都采用上面显示的标题列格式,我认为最好的方法可能是在插入数据库表之前将正则表达式应用于标题。此正则表达式可以捕获“ - ”字符前面的所有数据,并丢弃“ - ”后面的“重复”数据。

有关PHP中字符串的正则表达式的信息,请访问:http://php.net/manual/en/function.preg-match.php

答案 1 :(得分:0)

您可以将url信息规范化到另一个表中...所以就像获取url列并使其成为url_id并创建一个提供url列和title列的url表。标题就像维基百科或Gamestop等。然后在原始表中存储标题,标题不包括网址标题。

对于您尝试执行的查询,这可能无法正常工作,但通过这种方式,您可以通过网址,网址标题或标题或其他任意组合进行搜索。

答案 2 :(得分:0)

我认为大多数自动化解决方案都有可能删除您想保留的数据。在多行上出现的单词或短语不一定是多余的。我想到了一些潜在的,但仍然不可靠的方法。只有当你在寻找整个单词时,这些才有效。

  1. 将所有标题读入数组,并通过将每个标题拆分为单词来创建wordlist数组。然后,您可以确定每个单词的频率,并使用该信息从标题中删除不需要的单词。如果您有大量数据,此方法可能会占用大量内存......

  2. 解析每个URL,提取主机名,使用句点(。)将其拆分为分隔符,然后从标题中搜索并删除这些字符串的出现位置。您可以选择创建要忽略的字符串白名单,例如www,com,co,uk,net,org等。如果在域名中找到不需要的单词,则此方法可能有效(如示例所示)。