求解,关于字符串处理的问题!怎么从字符串中找联系

number123456 2011-03-25 10:24:54
最近遇到了一个问题,怎么对字符串解析后,进行分块存储。比如说:
我有五个表,
t1,t2,t3,t4,t5

现在要插入一条信息,
$a = "要插入的信息标题是这样子的";

问题是,如何通过将这个字符串来划分,需储到哪个表中?找到字符串的某个特性来判断一下。

而且,因为要进行模糊搜索,所以还要考虑到提出其中的某几个字,也能算出是包含在哪个表中的。

求这个算法的提示!


不知道大家有没有看懂我的意思。

请大家帮帮忙给些思路。
...全文
159 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
ImN1 2011-04-02
  • 打赏
  • 举报
回复
#19的意思是说

我 进 表:我
你 进 表:你

那么“我和你”进哪个表?表:地球村 么?
number123456 2011-04-02
  • 打赏
  • 举报
回复
回楼上的,
AAA标题也进a表,BBB标题也进b表,

然后搜索A,AA,AAA都去a表去搜索标题包含A的内容
helloyou0 2011-04-01
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 snmr_com 的回复:]

我都跟你说了用 levenshtein()
你又听不进去,这函数好用的很,我都用好几年了,看下面的例子

$words那几个词只要固定死了,相互间不要太接近(要从字码方面考虑),分类就算完成了
即使$input怎么换,也能找出最相似的,$input你自己不断换不同的内容测试一下就知道了
关键是设好$words就足够了

<?php
// input misspelled word……
[/Quote]

+3

楼主对自己的需要并不很清楚.

按照楼主的说法,
假设AAA在a表,BBB在b表,那么AAA BBB这个标题应该在哪个表?





ImN1 2011-03-31
  • 打赏
  • 举报
回复
我都跟你说了用 levenshtein()
你又听不进去,这函数好用的很,我都用好几年了,看下面的例子

$words那几个词只要固定死了,相互间不要太接近(要从字码方面考虑),分类就算完成了
即使$input怎么换,也能找出最相似的,$input你自己不断换不同的内容测试一下就知道了
关键是设好$words就足够了

<?php
// input misspelled word
$input = '麒sf麟g345厍%#%人是个大坏蛋banana';

// array of words to check against
$words = array('苹果','pineapple','大banana','orange',
'radish','麒麟坏蛋','pea','bean','坏蛋');

// no shortest distance found, yet
$shortest = -1;

// loop through words to find the closest
foreach ($words as $word) {

// calculate the distance between the input word,
// and the current word
$lev = levenshtein($input, $word);

// check for an exact match
if ($lev == 0) {

// closest word is this one (exact match)
$closest = $word;
$shortest = 0;

// break out of the loop; we've found an exact match
break;
}

// if this distance is less than the next found shortest
// distance, OR if a next shortest word has not yet been found
if ($lev <= $shortest || $shortest < 0) {
// set the closest match, and shortest distance
$closest = $word;
$shortest = $lev;
}
}

echo "Input word: $input\n";
if ($shortest == 0) {
echo "Exact match found: $closest\n";
} else {
echo "Did you mean: $closest?\n";
}

?>


这咚咚还能用来河蟹,即使输入“河&*^*蟹”也能找出来,所以我一般不愿意直接贴例子
看你问了又问,真是看不下去了……

中文分词是世界难题,不要再从这方面想了,留给砖家做吧
levenshtein() 是有数学算法原理在里面的,不是简单比较匹配,
有兴趣自己再深入查一下“string pattern match”会有更多算法
foolbirdflyfirst 2011-03-31
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 number123456 的回复:]

回楼上的,单算md5的hash值还不行,
比如说:
$str = '快拉萨的飞机历史的飞机我拉架了刷卡的积分 ';
echo ord(substr(md5($str), 0, 1)) % 5;
得到的是2

$str = '积分';
echo ord(substr(md5($str), 0, 1)) % 5;
得到的是3

那么我就没办法去指定的库搜索了
[/Quote]
你可以中文分词,建多个中间表,把'积分'和对应的表名存起来,下次你要搜索,就对搜索关键字进行分词,把分词结果对应的表得到,再搜索。
number123456 2011-03-31
  • 打赏
  • 举报
回复
还有人能做提示吗?
number123456 2011-03-26
  • 打赏
  • 举报
回复
回楼上的,单算md5的hash值还不行,
比如说:
$str = '快拉萨的飞机历史的飞机我拉架了刷卡的积分 ';
echo ord(substr(md5($str), 0, 1)) % 5;
得到的是2

$str = '积分';
echo ord(substr(md5($str), 0, 1)) % 5;
得到的是3

那么我就没办法去指定的库搜索了
ImN1 2011-03-25
  • 打赏
  • 举报
回复
levenshtein()
看手册的例程
number123456 2011-03-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 cunningboy 的回复:]
你的划分规则有没有?
这个是基本的需求定义
[/Quote]

你好,因为我的总体需求是因为存储量大,而需要分表存储来减轻数据库负担,所以我想根据标题来划分出不同的区块来存储,比如说算出“我们的”这三个字的某个值为1,然后,我的表t1,是存储1-10的,那么这个标题的信息就存储到t1表中,然后,搜索的时候,搜索“我”这个字,算出他的值,应该是在t1这个表搜索,

就是这个标准来怎么划分我实在想不出来,恳请你能帮我一下。
lazyboy_wu 2011-03-25
  • 打赏
  • 举报
回复
请搜索“中文切词”算法
feng_lqwe 2011-03-25
  • 打赏
  • 举报
回复
这个感觉不太好搞。。。
CunningBoy 2011-03-25
  • 打赏
  • 举报
回复
你的划分规则有没有?
这个是基本的需求定义
lazyboy_wu 2011-03-25
  • 打赏
  • 举报
回复
我理解错你的意思了,仅仅是hash算法的话,用md5就可以了

$rate = ord(substr(md5($str), 0, 1)) % 5; // 截取md5的第一位, 转换成数字,然后对其取模运算
士居坡西 2011-03-25
  • 打赏
  • 举报
回复
我觉得可以对标题进行编码运算,最后得到数字,然后根据数字大小进行划分。
lazyboy_wu 2011-03-25
  • 打赏
  • 举报
回复
你用中文分词的算法多好,

重庆重重庆 你打算怎么处理?当然不一定有这样bt的用法

你可以将中文分词的词根拿来处理一下,比如一些词根+1 一些词根+2,那么到中文分词以后,你就可以直接处理的这个标题的权值;

示例:
$arr = array(
// 中文算法的词根
1=>array('我的', '你的'),
2=>array('他的', '谁的')
);

$str = '我的给谁的';

$word_arr = 中文切词算法($str);

$rate = 0;
foreach($word_arr as $word) {
if($arr中含有词根) {
$rate += $arr中的key;
}
}

$rate = $rate % 10;

// 下面你随便处理

number123456 2011-03-25
  • 打赏
  • 举报
回复
是的,就是这个意思!可能是我说的不太明白。大体的意思就是根据标题的内容来分出类别存储到不同表里
CunningBoy 2011-03-25
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 number123456 的回复:]

引用 1 楼 cunningboy 的回复:
你的划分规则有没有?
这个是基本的需求定义


你好,因为我的总体需求是因为存储量大,而需要分表存储来减轻数据库负担,所以我想根据标题来划分出不同的区块来存储,比如说算出“我们的”这三个字的某个值为1,然后,我的表t1,是存储1-10的,那么这个标题的信息就存储到t1表中,然后,搜索的时候,搜索“我”这个字,算出他的值,应该是在t1这个表搜……
[/Quote]
那你是想按标题的内容分种类来储存?
number123456 2011-03-25
  • 打赏
  • 举报
回复
还有谁能给些意见吗?请大家帮帮我!谢谢了

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧