我写了一个英语方面的软件,其中有一个功能是要查找相似的单词(包括词形或词义)。并且要把两个单词的相似程度表示出来(用于排序或者自定义需要的相似程度等等)。
就这个相似程度的规定,我想在很茫然,不知道如何规定是好。我想这个相似应该不只是简单的一段的匹配。比如说,单从词形上讲,aaab和aada词形很像,而aaab和aaba应该更像。我能预想到的类似的不好判断的地方很多。我实在想不出一个很好地衡量尺度。而且,即使确定了衡量尺度,如何很高效的实现代码我也没想通。不知道会不会有相关这方面的书籍,如果有是最好了。
希望高手们多多指教!不管你的想法是什么,请你告诉我,多谢!
就这个相似程度的规定,我想在很茫然,不知道如何规定是好。我想这个相似应该不只是简单的一段的匹配。比如说,单从词形上讲,aaab和aada词形很像,而aaab和aaba应该更像。我能预想到的类似的不好判断的地方很多。我实在想不出一个很好地衡量尺度。而且,即使确定了衡量尺度,如何很高效的实现代码我也没想通。不知道会不会有相关这方面的书籍,如果有是最好了。
希望高手们多多指教!不管你的想法是什么,请你告诉我,多谢!
比如 aaab 和 aaba
找出两个字符串中的相同字符..
两个字符窜 有字母 a b 组成..a在字符串1 中出现的频率为3次 b为1次 在字符窜2中 a为3次 b为1次.
那么相似度 S我们规定他为 a的相似度+b的相似度 4/4 + 1/1 =2
aaab 和 aada
a相似度 3/3 b: 0/1 d: 0/1 整体相似度 3/3+0/1+0/1 =1
我们还可以找出单词的一些基本组成作为对比的基数 "ch" "sh" ...等等就用拆开.
"要在webbrowser控件内形成文件夹视图,怎么办?急死了!"
SOUNDEX:返回由四个字符组成的代码 (SOUNDEX) 以评估两个字符串的相似性。
DIFFERENCE:以整数返回两个字符表达式的 SOUNDEX 值之差。SOUNDEX 将 alpha 字符串转换成由四个字符组成的代码,以查找相似的词或名称。代码的第一个字符是 character_expression 的第一个字符,代码的第二个字符到第四个字符是数字。将忽略 character_expression 中的元音,除非它们是字符串的第一个字母。可以嵌套字符串函数。
多谢,这个方法应该可以作为评判标准之一。to windindance:
这么好的东西?!可惜俺没有:(
能不能帮贴几个实例见识一下?比如说:
like 和 alike 加了一个首字母
some 和 same 只改变了一个字母
back 和 black 多了一个字母
abroad 和 aboard 调整了一个字母r的位置
我想知道类似的情况的SOUNDEX代码是如何定义的。to 所有楼上的:
非常感谢各位朋友的意见及关注!
觉得单词A和单词B相似程度大致可以分这几个方面:1、AB长度相同、只有n个单字不同
和整字长度相比,n足够大时也就不相似了
sex、six
teeth、tooth2、A为B字串的子串
前缀、后缀、合成词之类
able、disable
some、somewhat3、A内嵌入若干字符得到B
place、palace
pow、pillow4、其它
基本应该就是以上情况的合成了……
Dim i, y, x As Integer
Dim a, b As String
String1 = UCase(String1) 'take this out If you
String2 = UCase(String2) 'want it To be case
'sensitive
If String1 = String2 Then CompareTXT = 1: Exit Function
'if the strings are
'the same, don't
'bother to waste time
'and space on working
'them out :).
If Len(String1) > Len(String2) Then x = Len(String1)
If Len(String2) > Len(String1) Then x = Len(String2)
If Len(String1) = Len(String2) Then x = Len(String1)
'find out the length
'of the longest string
For i = 1 To x
a = Mid(String1, i, 1) 'get 1 character from
b = Mid(String2, i, 1) 'each string and compare
If a = b Then y = y + 1 'the characters
Next
CompareTXT = y / x
End FunctionPrivate Sub Command1_Click()
MsgBox CompareTXT(Text1, Text2) * 100 \ 1 & "%"
End Sub
很不错的方法哦!只是写起来有点困难,我会把它记着,以后再琢磨:)to all:
非常感谢各位的指点,现在我已经写成了一个初步的相似度判断程序。
后面可能还会碰到很多问题,我会继续向大家请教的:)先结贴了!