以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]相似度  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=122685)

--  作者:天一生水
--  发布时间:2018/7/31 11:15:00
--  [求助]相似度

甜老师好!

您以前写的相似度代码,我想在第二段代码的加黑地方应用。

原先代码的意思是:[案号][被告]都相同时,就引用数据,否则就添加新行;

实际应用中,[被告]的描述可能有些不同,因为共同的字符不固定,前后的包含关系也不确定。比如,“章丘市人民政府”和“济南市章丘区人民政府”。

因此,我希望,如果[被告]的相似度>70(相同字符与短字符串的占比)就认为找到了,进而引用数据;否则才添加新行。

第二段代码怎样修改呢?自己改不了,请老师指教。

谢谢!

 

1、--------------------------------------

Dim sa As String = "章丘市人民政府"
Dim sb As String = "济南市章丘区人民政府"
Dim count As Integer
\'For i As Integer = 0 To sa.Length - 1
For i As Integer = 0 To IIF((sa.Length-sb.Length)< 0, sa, sb).Length - 1   \'短字符长度
    \'If sb.Contains(sa(i)) Then
    If IIF((sa.Length-sb.Length)> 0, sa, sb).Contains(IIF((sa.Length-sb.Length)< = 0, sa, sb)(i)) Then    \'长字符包括短字符
        count += 1
    End If
Next
msgbox(IIF((sa.Length-sb.Length)< =0, sa.Length, sb.Length))    \'短字符长度
msgbox(IIF((sa.Length-sb.Length) > 0, sa.Length, sb.Length))    \'长字符长度
msgbox(count)                  \'共同字符数
msgbox(count/IIF((sa.Length-sb.Length)< = 0, sa.Length, sb.Length)*100%)   \'占比-短
msgbox(count/IIF((sa.Length-sb.Length)> 0, sa.Length, sb.Length)*100%)   \'占比-长

 

2、---------------------------------------
 If e.DataCol.name = "庭审笔录_被告出庭" Then
        Dim str As String = e.NewValue
        If str > "" Then
            Dim ary() As String = str.Replace("被告", "@").split("@")           
            For i As Integer = 0 To ary.length-1
                str = ary(i).trim()
                If str > "" Then
                    str = "被告" & str
                    Dim mc = System.Text.RegularExpressions.Regex.Matches(str, "(?<=被告).*?(?=。)")   \'提取被告单位名称
                    Dim s As String = mc(0).value
                    \'到机关负责人出庭表去找
                    Dim dr = DataTables("机关负责人出庭").Find("[案号] = \'" & e.DataRow("案号") & "\' And [被告] = \'" & s.split(",")(0) & "\'")
                    If dr Is Nothing Then                       
                        dr = DataTables("机关负责人出庭").AddNew
                    End If
                    dr("案号") = e.DataRow("案号")
                    dr("被告") = s.split(",")(0)
                    dr("庭审笔录被告出庭") = str
                    dr("开庭时间") = e.DataRow("开庭排期_开庭时间")                   
                End If
            Next
        End If
    End If

 

 


 

 


--  作者:有点甜
--  发布时间:2018/7/31 11:55:00
--  

如果你需要相似度查询,你就不能用find查找了。

 

你需要循环表格的每一行,取出每一行的值和你要匹配的数据比较,才能得出对比结果的。匹配以后跳出循环,或者是找到最匹配的那个。