首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

自动提取关键字解决思路

2012-04-22 
自动提取关键字以英文为例,其他暂不考虑数据库产品描述列,自动提取关键字1:该单词出现频率最高.2: E文也有

自动提取关键字
以英文为例,其他暂不考虑
数据库产品描述列,自动提取关键字
1:该单词出现频率最高.
2: E文也有短语,怎样获取?
3: ??

[解决办法]
没单词库你如何判断词性?
[解决办法]
帮顶。。。
[解决办法]
分词,搜索关键字
Dictionary<char, int> counter = new Dictionary<char, int>();
string s = "";
char max = s[0];
foreach (char c in s)
{
if (!char.IsLetter(c)) continue;
if (counter.ContainsKey(c))
counter[c]++;
else counter.Add(c, 1);
if (counter[max] < counter[c]) max = c;
}

[解决办法]
不用关键字库,那就是人工智能了。。楼主加油。。
[解决办法]
没有词库,也就是没有样例,机器根本就分不出他是谁

就是人,也是因为大脑里存了很多信息以后,才能识别事物
就像刚出生的小孩,连爸妈是谁都不知道
必须要学习,积累后才能识别

[解决办法]
ajax中好像有个智能提示的控件
[解决办法]
不用关键字词库的话,this、the这些提取出来你用什么规则过滤
[解决办法]
肯定是要有关键字库的,一般可以用名词作关键字,或者动名称作关键字
字库的来源可以有两种,一种是用户工作输入其关键字后保存到库里面,进行次数累加
另一种是去百度等搜索引擎里面去抓取一些关键词来做词库
反正这个词库也是动态递增的

如果没有词库的话,就像楼上说的7楼说的就是人工智能了,人工智能也是把关键词保存到了大脑中,才可以提炼的,要不然就是随机生成文字拼凑,那样也没有意义了
[解决办法]
或许我们可以这么理解:并非绝对不用关键词库,而是使用一个存储少量数据的词库。
这个库的初步构成为the、a、an、is之类的无意义词。
在提取过程中以空格分割,优先提取is之前的词(名词)、a、the之后的词(形容词或名词)。
本来还多写点,仔细算了下这样效率不是很好,不写了。
一点拙见,还请哪位大牛指教下提取规则(现在肯定是有不使用大词库提取关键字的规则的)。
[解决办法]
想法:
1. 依空格查出每个单词
2. 将单词存入数组
3. 检查出现次数,同时更新数组
4. 最后查出最大值
[解决办法]
提供一个想法~
首先要确定单词,就必须提供单词的断句吧~假设以空格来划分单词的话,先提取出一部分单词,然后在比较小的一份范围内搜索(比如说前10条记录),如果该单词在范围内出现过,则记录该单词,并继续进行搜索,每多出现一次就加一,最后得出重复次数最多的单词?
嗯,这个算法应该算贪心算法吧,并不一定能够得到最优解,但是我觉得还可行~
[解决办法]
Mark 
我们公司用的是:用文本库查关键字
[解决办法]
顶顶~~********************************************************
本内容用 CSDN小秘书 回复
每天回帖即可获得10分可用分!
********************************************************
[解决办法]

没有库的话,只能以最小单位的字和单词作为库,再通过高频率的字或单词索引找关联的词。
Word的提取关键字不知道怎么弄的。
[解决办法]
MSDN 上有关于用 Regex 获取一段文本中出现单词的频率,但那个文本是英文的 \b可以判断出单词边界
中文的没办法,貌似只能用词库
[解决办法]
语料库 必须的!
[解决办法]
想了一下,不用关键词库,还真没办法比对。
[解决办法]


应该是要有关键字库。。

mark
[解决办法]
楼主很强,没研究过,帮顶
[解决办法]
人类语言的分析, 很强大哦
[解决办法]
有点复杂
[解决办法]
可以把,我试过,就是中文乱码,还有词性没有过滤,有些关键字提取出来了,就是定义最小长度,最小词频,保留有交集的而词频相等最长的关键字,就是中文会出现乱码,位置没有考虑中文,截取出现了问题




这是我用php写的

PHP code
<?php$tiqustr='肯定是要有关键字库的,一般可以用名词作关键字,或者动名称作关键字字库的来源可以有两种,一种是用户工作输入其关键字后保存到库里面,进行次数累加另一种是去百度等搜索引擎里面去抓取一些关键词来做词库反正这个词库也是动态递增的如果没有词库的话,就像楼上说的7楼说的就是人工智能了,人工智能也是把关键词保存到了大脑中,才可以提炼的,要不然就是随机生成文字拼凑,那样也没有意义了对我有用[0]丢个板砖[0]引用举报管理TOPjorln(jorln)等 级:#13楼 得分:0回复于:2010-12-07 13:59:55或许我们可以这么理解:并非绝对不用关键词库,而是使用一个存储少量数据的词库。这个库的初步构成为the、a、an、is之类的无意义词。在提取过程中以空格分割,优先提取is之前的词(名词)、a、the之后的词(形容词或名词)。本来还多写点,仔细算了下这样效率不是很好,不写了。一点拙见,还请哪位大牛指教下提取规则(现在肯定是有不使用大词库提取关键字的规则的)。 ';//提取关键字的目标字符串$mincipin=4;//最小词频$minlen=4;//关键字最小长度tiqukeyword($tiqustr,$minlen,$mincipin);function tiqukeyword($tiqustr,$minlen,$mincipin){$strlong=strlen($tiqustr);$arr=array();$k=-1;for($i=0;$i<($strlong-$mincipin*$minlen);$i++){$end=ceil(($strlong-$i)/$mincipin+$i);for($j=$minlen;$j<$end;$j++){$num=0;if(($guanjianzi=mb_substr($tiqustr,$i,$j))!==false){$wz=$i+$j;$num++;}else{break;}while($wz<$strlong){if(($wz=strpos($tiqustr,$guanjianzi,$wz))!==false){$num++;$wz=$wz+strlen($guanjianzi);}else break;}if($j==$minlen){if($num>=$mincipin){$maxnum=$num;$k++;$str=mb_substr($tiqustr,$i,$j);$arr[$k]=array($i,$j,$str,$num,0);}else{break;}}else{if($num>=$maxnum){$maxnum=$num;$str=mb_substr($tiqustr,$i,$j);$arr[$k]=array($i,$j,$str,$num,0);}else break;}}}echo '初步得到的数组:';print_r($arr);//echo '<br/><br/><br/><br/>';$arrlong=count($arr);for($i=0;$i<$arrlong;$i++){$bjarr=$arr[$i];$nowid=$i;if($bjarr[4]==1)continue;for($j=$i+1;$j<$arrlong;$j++){if($arr[$j][4]==1)continue;$qujianks=$bjarr[0];$qujianjs=$bjarr[1]+$bjarr[0]-1;$a=$arr[$j][0];$b=$arr[$j][1]+$arr[$j][0]-1;if(($bjarr[2]==$arr[$j][2])&&($bjarr[3]>$arr[$j][3]))$arr[$j][4]=1;if($a<=$qujianks&&$qujianks<=$b&&$a<=$qujianjs&&$qujianjs<=$b){if($bjarr[3]<=$arr[$j][3]){$arr[$nowid][4]=1;$nowid=$j;$bjarr=$arr[$j];}}elseif($qujianks<=$a&&$a<=$qujianjs&&$qujianks<=$b&&$b<=$qujianjs){$arr[$j][4]=1;}}}echo '<br/><br/><br/><br/>重叠加标记后的数组:';print_r($arr);$jieguoarr=array();for($i=0;$i<$arrlong;$i++){if($arr[$i][4]==0)$jieguoarr[]=$arr[$i];}echo '<br/><br/><br/><br/>';echo '最后得到的数组:';print_r($jieguoarr);}?>
[解决办法]
探讨
想了一下,不用关键词库,还真没办法比对。

[解决办法]
单词库有现成的。百度搜索的时候的提示,谷歌搜索的时候的自动提示功能,都可以利用。
[解决办法]
微软有个这种关键字搜索引擎,可以查一下有没有统计单词频率的功能。。。。忘记叫什么,以前用它来做全站搜索。
[解决办法]
路过 不会。。。。
[解决办法]
没有库恐怕不好弄,我觉得要有库。。
[解决办法]
“关键字”怎么定义的呢,
比如is,a之类的词算不算是关键字,如果不算,你怎么知道他不算,必须记录下来,还是要词库的。
或者你只能根据一定的规则来定义,比如长度短于几个字符,但你又不能忽略短语。
所以我觉得词库是必须的。

至于分词,是有很多开源项目,比如apache的lucene,也有.net版本。
[解决办法]
还是要有词库的,因为计算机并不知道啥叫“关键字”

如果按频率算,恐怕你每篇文章的关键字都是 “I” "am" "me","you" "the" "this" "that" “is” 这类毫无意义的东西了

这东西可能最经常看到的算法就是“贝叶斯统计”了
[解决办法]
实际上我是根本就不考虑让计算机去自己判定关键字第

这个根本就不靠谱,就是最先进的计算机人工智能领域,计算机的智商也就只相当于4岁的儿童

让4岁的儿童去分拣信息,你信得过不??

比如:贝叶斯统计

大多数邮件系统的垃圾邮件过滤就是采用贝叶斯算法过滤,但是你自己知道,那个也只是一个聊胜于无的手段,不知道多少有用的邮件被分到垃圾堆了,而又不知道多少垃圾邮件又被放行了

热点排行