跪求C#实现多模式匹配算法,如Wu-Manber
如题,实在没有C#的,C的也可以
最好有注释~
问题点数:300、回复次数:50Top
1 楼fellowcheng(鹰击长空)回复于 2006-12-31 14:30:40 得分 7
关注Top
2 楼fellowcheng(鹰击长空)回复于 2006-12-31 14:30:50 得分 0
板凳Top
3 楼glacier111(★冰河★)回复于 2006-12-31 14:31:09 得分 3
UpTop
4 楼viena(维也纳N02)回复于 2006-12-31 14:32:01 得分 0
不要在这里灌水,拜托!Top
5 楼viena(维也纳N02)回复于 2007-01-04 15:04:06 得分 0
也许是发错地方了~Top
6 楼glacier111(★冰河★)回复于 2007-01-04 15:06:44 得分 3
UPTop
7 楼honkerhero(做事先做人)回复于 2007-01-04 15:09:16 得分 7
没明白什么意思?什么叫多模式匹配?Top
8 楼viena(维也纳N02)回复于 2007-01-04 15:19:50 得分 0
多模式匹配就是多关键字全文检索,一篇文章只搜索一遍就可找到多个关键字~Top
9 楼liujia_0421(SnowLover)回复于 2007-01-04 15:26:16 得分 7
支持伟大的viena(维也纳nn-下潜15米,潜望镜升起) MM..
呵呵..Top
10 楼viena(维也纳N02)回复于 2007-01-04 15:28:53 得分 0
楼上MM帮帮忙啊~Top
11 楼liujia_0421(SnowLover)回复于 2007-01-04 15:31:45 得分 3
好,帮MM找找看..
^_^Top
12 楼honkerhero(做事先做人)回复于 2007-01-04 15:32:56 得分 7
数据库没有么?全文索引Top
13 楼GXY2005(民工甲:杀富济贫,打土豪分田地)回复于 2007-01-04 15:48:35 得分 5
复旦大学的MM?
不是MM吧?
Top
14 楼mobydick(敌伯威|我排著队拿著爱的号码牌)回复于 2007-01-04 16:44:36 得分 50
正则表达式?
string yourStr = ......;//这个页面Ctrl+A,Ctrl+C
Regex regex = new Regex("跪求|维也纳", RegexOptions.IgnoreCase);
MatchCollection mc = regex.Matches(yourStr);
Dictionary<string, int> key = new Dictionary<string, int>;
key.Add("跪求", 0);
key.Add("维也纳", 0);
foreach(Match m in mc)
{
if(m.Value == "跪求")
{
key["跪求"]++;
}
else
{
key["维也纳"]++;
}
}Top
15 楼ustbwuyi()回复于 2007-01-04 16:51:36 得分 5
又见维也纳MM发贴,可惜我没有Top
16 楼lizhizhe2000(武安侯)回复于 2007-01-04 16:58:08 得分 7
Lucene .NET 不知道对老大有没有帮助!Top
17 楼leohuang(LEO)回复于 2007-01-04 17:00:11 得分 16
不会是楼上的楼上那样的吧Top
18 楼zhsu(不懂生活的人)回复于 2007-01-04 17:04:24 得分 7
应该是用正则表达式来匹配Top
19 楼wxl565(汪汪)回复于 2007-01-04 17:14:47 得分 3
发ASP.NET里去呀Top
20 楼bejon(阿牛[如果我懂,必坦诚相告;如果您懂,请不吝赐教。])回复于 2007-01-04 17:34:41 得分 7
正则估计可行
不知道楼主想要什么效果呢Top
21 楼viena(维也纳N02)回复于 2007-01-04 17:47:42 得分 0
要把找到的关键字替换为指定的值
要求高执行效率,C#可能要用Unsafe代码Top
22 楼viena(维也纳N02)回复于 2007-01-04 17:51:31 得分 0
每个关键字对应不同的替换值Top
23 楼liujia_0421(SnowLover)回复于 2007-01-04 17:52:29 得分 9
viena(维也纳nn-下潜15米,潜望镜升起) MM,我已经尽力,想千方,设百计,结果还是没能找着..
帮MM顶哦..
如果找不着就看算法写个呗,对你来说应该也不难..Top
24 楼liujia_0421(SnowLover)回复于 2007-01-04 17:53:19 得分 0
再顶..
^_^Top
25 楼net_lover(【孟子E章】)回复于 2007-01-04 17:55:36 得分 20
这些应该可以
C#,VB.NET的都有
http://dotnetjunkies.com/Tutorial/195E323C-78F3-4884-A5AA-3A1081AC3B35.dcik
Top
26 楼net_lover(【孟子E章】)回复于 2007-01-04 17:57:45 得分 70
and
http://www.codeproject.com/csharp/highlightcs.asp?df=100&forumid=14824&exp=0&select=1760087Top
27 楼viena(维也纳N02)回复于 2007-01-04 19:52:42 得分 0
我知道可以用正则,但我想自己实现~Top
28 楼liujia_0421(SnowLover)回复于 2007-01-04 20:38:07 得分 3
支持MM,呵呵..Top
29 楼superxiaomm(小美)回复于 2007-01-04 20:50:05 得分 3
jfTop
30 楼net_lover(【孟子E章】)回复于 2007-01-04 21:00:46 得分 0
ReflectorTop
31 楼marvelboy123()回复于 2007-01-04 21:36:10 得分 10
while(i<=lengthRes &&j<=lengthStr) { if(res[i]==str[j]) { // go on matching ++i;} else if( j == lengthStr ) return i-lengthStr;起存在和串 T 相同的子串,则称匹配成功,返回第一个。这样的子串在串 S 中的下标,否则返回 -1 */ int i = pos, j = 0; while ( res[i+j] != ’\0’&& str[j] != ’\0’)// 匹配成功 返回下标 else return -1; // 串S中(第pos个字符起)不存在和串T相同的子串}
Top
32 楼viena(维也纳N02)回复于 2007-01-05 09:26:47 得分 0
我要的是算法实现,没有那么简单的~Top
33 楼ustbwuyi()回复于 2007-01-05 09:32:47 得分 0
连孟子都惊动了..Top
34 楼shuiwatermizu()回复于 2007-01-05 15:26:10 得分 20
/*
sm.cs © 2007 by Shuiwatermizu
1. scan the original string from the start.
2. look for all the string in lookfor array.
if found, scan the original string from the position after the found string
if not found, scan the next character of the original string
This method is faster than regex.
*/
using System;
using System.Diagnostics;
public class T
{
public static void Main()
{
string original=@"onetwothreefour";
string[] lookfor=new string[]{"two", "four"};
string[] replacewith=new string[]{"twenty", "forty"};
Console.WriteLine("After replace: {0}", ReplaceEx2(original, lookfor, replacewith));
}//end of Main()
public static string ReplaceEx2(string original, string[] lookfor, string[] replacewith)
{
int increasedSize=0;
for (int t=0;t<lookfor.Length;t++)
{
increasedSize+=replacewith[t].Length-lookfor[t].Length;
}
int retLen=original.Length+increasedSize;//Adjust this value to accomodate the result string.
char[] ret=new char[retLen];
int i=0; //position of the original string
int j=0; //position of the result.
int m=0;
while (i<original.Length)
{
for (m=0;m<lookfor.Length;m++)//loop through all the search strings
{
int n=0;
while (n<lookfor[m].Length)//loop through a single search string
{
if (i+n<original.Length)
{
if (lookfor[m][n]!=original[i+n])
break;//not found
}
else
break;
n++;
}
if (n==lookfor[m].Length)//found match of lookfor[m]
{
Console.WriteLine("match {0} at position {1}", lookfor[m], i);//DoFoundOperation();
for (int k=0;k<replacewith[m].Length;k++)
ret[j+k]=replacewith[m][k];
j+=replacewith[m].Length;
i+=lookfor[m].Length;
break;
}
}
if (m==lookfor.Length)//not match all the search string
{
ret[j]=original[i];
j++;
i++;
}
}//loop through the total string.
return (new string(ret));
}
}Top
35 楼viena(维也纳N02)回复于 2007-01-08 09:09:42 得分 0
upTop
36 楼viena(维也纳N02)回复于 2007-01-16 11:43:43 得分 0
因为有几千个关键字,对执行效率要求比较高
再顶一下,如果实在没有只好用正则了Top
37 楼liujia_0421(SnowLover)回复于 2007-01-16 11:48:08 得分 0
还没找到吗?
帮MM顶下..
嘎嘎..Top
38 楼idiotzeng(白痴)回复于 2007-01-16 11:52:58 得分 0
有没有其他语言的代码?Top
39 楼hertcloud(·£孙子兵法£·)回复于 2007-01-16 11:57:04 得分 10
SQL配置 全文索引 用 喂词 查询
不行、?Top
40 楼renmasheshou(狼狗)回复于 2007-01-16 12:02:35 得分 3
楼主是MM????Top
41 楼mobydick(敌伯威|我排著队拿著爱的号码牌)回复于 2007-01-16 12:07:03 得分 0
~~~几千关键字Top
42 楼hertcloud(·£孙子兵法£·)回复于 2007-01-16 12:10:30 得分 15
c++primer 6章 里面有 类似 算法Top
43 楼liujia_0421(SnowLover)回复于 2007-01-16 12:29:03 得分 0
TO:楼主是MM????
嗯,是的..Top
44 楼viena(维也纳N02)回复于 2007-01-16 12:51:12 得分 0
我不是MM,楼上是我女朋友~Top
45 楼liujia_0421(SnowLover)回复于 2007-01-16 12:59:18 得分 0
^_^Top
46 楼mobydick(敌伯威|我排著队拿著爱的号码牌)回复于 2007-01-16 13:14:47 得分 0
liujia_0421(SnowLover) ( ) 信誉:100 Blog 2007-01-16 12:29:03 得分: 0
TO:楼主是MM????
嗯,是的..
Top
viena(维也纳nn-下潜15米,潜望镜升起) ( ) 信誉:100 Blog 2007-01-16 12:51:10 得分: 0
我不是MM,楼上是我女朋友~
Top
liujia_0421(SnowLover) ( ) 信誉:100 Blog 2007-01-16 12:59:18 得分: 0
^_^
Top
============================
TQ贴~~Top
47 楼viena(维也纳N02)回复于 2007-01-27 23:13:51 得分 0
没办法,只能用正则了
给出正则具体解决方案的给了高一点的分
抱歉,其他方案更不适合,但也酌情给了些分~Top
48 楼mobydick(敌伯威|我排著队拿著爱的号码牌)回复于 2007-01-28 10:20:36 得分 0
......看来项目进度不紧。过了一个月才决定~Top
49 楼viena(维也纳N02)回复于 2007-01-29 09:04:13 得分 0
//......看来项目进度不紧。过了一个月才决定~
非也,项目没开始之前我不能做技术准备吗?Top
50 楼viena(维也纳N02)回复于 2007-01-29 09:06:16 得分 0
如果项目已经开始了,我就不会到这里来问了
本来也没抱多大希望,只是想碰碰运气而已~Top




