当前位置: 代码迷 >> vbScript >> 得到单词有效原子集合的算法.解决办法
  详细解决方案

得到单词有效原子集合的算法.解决办法

热度:8720   发布时间:2013-02-26 00:00:00.0
得到单词有效原子集合的算法.
原子:单词抠掉个别字母的子串,如:abc   中的ac   bc   ab   abc注意:ca不算
有效原子:长度大于单词长60%的原子,可用于联想记忆,比较相似单词.

<SCRIPT   LANGUAGE= "vbScript ">

str= "aaccb "  
' '创建全局字典对象,用来存储所有得到的原子结果
Set   dict=CreateObject( "Scripting.Dictionary ")

Dim     a(100)
strLength=Len(str)
' '原子
atomyLength=round(strLength*0.6)

For   x=atomyLength   To   strLength
  a(0)=x  
  ' '计算5选3,5选4,5选5组合
  combine   strLength,x  
next
 


sub   combine(m,     k)  
' '计算组合在m里面选k个元素的全部组合情况,添加到字典对象里
  i=0
  j=0  
  For   i=m   To   k   Step   -1
    a(k)=i  
    if   (k> 1)     then
      combine   i-1,k-1    
    else  
      tempStr= " "
      for     j=1   To   a(0)    
        tempStr=tempStr   &     Mid(str,a(j),1)  
      Next
      ' '排除重复的,加到字典里
      If   Not   dict.   Exists(tempStr)   then     dict.add   tempStr,Len(tempStr)
    End   if  
  next  
End   sub  

Main()

Sub   Main
  ' '输出显示结果
  For   i=0   To   dict.count-1
    Document.write     dict.keys()(i)   &   "   &nbsp; "
  next
End   sub
</SCRIPT>  



------解决方案--------------------------------------------------------
狂顶!!
------解决方案--------------------------------------------------------
收藏了先。
有空再来讨论。
------解决方案--------------------------------------------------------
mark
------解决方案--------------------------------------------------------
拆词,不错!给排下序吧!
------解决方案--------------------------------------------------------
由于我现在在做索引结构和算法的研究,特别是近似匹配问题。所以从上楼主个帖子一直跟到这。
===================================
1.首先,在我看的文章中,好像子串一般是指,一个源串中连续的串。所以在上个帖中,一看到楼主说子串,就没看楼主的原子的定义了。先向楼主道歉:-)

2.楼主想过没有你这个原子的定义,会有产生组合爆炸的危险。

3.你的单词源数据量已经比较大了,所产生的原子的规模又是源数据的10倍以上的数据规模。如果用数据库的话,效率应该有问题吧。

4.楼主这个问题,已经有很多比较成熟的技术来解决了,而且有一批很优秀的算法,楼主为什么不考虑用算法来实现呢,而且一般来说,算法要比数据库的效率高很多吧。

5.这个是在我看的论文中比较公用的公共子串的定义和一个经典的找法,和楼主的原子的定义的区别就是子串本身是不容错的,可能说的不太准确,就是子串一定是源串中连续的。
最长公共子串(Longest common substring, 简称LCS)问题指的是求出给定的一组字符串的长度最大的共有的子字符串。
举例说明,以下三个字符串的LCS就是 cde:
abcde
cdef
ccde
经典的方法是使用Generalized Suffix Tree。
GST的结构特点为:
些特点:

1.树的每个节点是一个字符串,树根是空字符串“”
2.任意一个后缀子串都可以由一条从根开始的路径表达
(将这条路径上的节点字符串依次拼接起来就可以得到这个后缀)
3.特别应注意任意一个子串都可以看作某一个后缀的前缀。既然每一个后缀
都可以由一条从根开始的路径表达,那么我们可以从根节点开始一个字符
一个字符的跟踪这条路径从而得到任意一个子串。
4.为了满足查找公共子串的需求,每个节点还应该有从属于哪个源字符串的
信息

其构造出的数据结构

--\_______【abcde.1】
|
|_____【bcde.1】 .....最深的并且带.123的节点
| :
|_____【c.123】____【de.123】_______【f.2】
| |
| |__【cde.3】
|
|_____【de.123】___【f.2】
  相关解决方案