标题:大师 请教个问题 在 VFP 中 如何 能把 两条 相似的数据 帅选出来(帮别人问 ...
只看楼主
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
估计是从ocr取得的数据。彻底的解决办法是做“相似数据库”,通过不断完善这个库的数据来反复过滤——反正是机器做,做多少次都不累人。

授人以渔,不授人以鱼。
2014-09-25 20:37
wjp456789
Rank: 5Rank: 5
来 自:四川成都
等 级:职业侠客
威 望:1
帖 子:345
专家分:330
注 册:2012-6-25
得分:0 
回复 10 楼 吹水佬
也就是说要编程实现嘛。SQL语句无法完成嘛

我是来向高手学习的!
2014-09-25 20:38
wjp456789
Rank: 5Rank: 5
来 自:四川成都
等 级:职业侠客
威 望:1
帖 子:345
专家分:330
注 册:2012-6-25
得分:0 
回复 11 楼 TonyDeng
有没有类似的代码?

我是来向高手学习的!
2014-09-25 20:39
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:5 
什么类似代码?不需要类似代码,思路就是那样,把“一”、“二”、“三”这样相似的字符做在一个表的记录行不同字段上,让程序检查实际数据的每一个字符是不是落在这个表的同一行上。相似字符是这样识别,相似字符串也可以这样识别。运行一次,实践检查,如果再发现有遗漏的相似情形,就补充这个表,再执行一次把遗漏的拣出来,直到实践中不再发现问题为止。反正程序是写好了的,随时可以执行,排查多少次都不用人力。

授人以渔,不授人以鱼。
2014-09-25 20:49
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
那还要会写代码啊

坚守VFP最后的阵地
2014-09-25 21:18
qingfameng
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:35
帖 子:964
专家分:3019
注 册:2010-2-6
得分:0 
模糊搜索没人提?
2014-09-25 21:44
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:15 
以下是引用wjp456789在2014-9-25 20:38:21的发言:

也就是说要编程实现嘛。SQL语句无法完成嘛

程序代码:
CLEAR
CREATE CURSOR TMP (姓名 C(10), 省份 C(10))
INSERT INTO TMP VALUES ("张小三", "北京")
INSERT INTO TMP VALUES ("张小四", "北京市")
INSERT INTO TMP VALUES ("王小二", "天津")
INSERT INTO TMP VALUES ("王小四", "河北")
INSERT INTO TMP VALUES ("张三", "河北省")
INSERT INTO TMP VALUES ("王小三", "天津市")
INSERT INTO TMP VALUES ("赵四", "上海")
INSERT INTO TMP VALUES ("陈小小", "云南")
INSERT INTO TMP VALUES ("陈一二", "广西")
INSERT INTO TMP VALUES ("陈小二", "云南省")
INSERT INTO TMP VALUES ("李五", "中国 北京")
INSERT INTO TMP VALUES ("张小五", "北京市")

FOR i = 1 TO RECCOUNT()
    GO i
    c姓名 = 姓名
    c省份 = 省份
    bTag = .F.
    SKIP
    SCAN REST 
        IF (DIFFERENCE(c姓名, 姓名) == 4) AND (DIFFERENCE(c省份, 省份) == 4)
            IF !bTag
                ?
                ? c姓名, c省份
                bTag = .T.
            ENDIF
            ? 姓名, 省份
        ENDIF
    ENDSCAN
ENDFOR


[ 本帖最后由 吹水佬 于 2014-9-25 22:45 编辑 ]
2014-09-25 22:39
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
上面示例只是通过语音相似度去核对,对于一些多音字可能不一定适合。
如果不想重复校对,可对已经比对过的记录做个标志。
程序代码:
CLEAR
CREATE CURSOR TMP (姓名 C(10), 省份 C(10), 标志 L)
INSERT INTO TMP VALUES ("张小三", "北京", .F.)
INSERT INTO TMP VALUES ("张小四", "北京市", .F.)
INSERT INTO TMP VALUES ("王小二", "天津", .F.)
INSERT INTO TMP VALUES ("王小四", "河北", .F.)
INSERT INTO TMP VALUES ("张三", "河北省", .F.)
INSERT INTO TMP VALUES ("王小三", "天津市", .F.)
INSERT INTO TMP VALUES ("赵四", "上海", .F.)
INSERT INTO TMP VALUES ("陈小小", "云南", .F.)
INSERT INTO TMP VALUES ("陈一二", "广西", .F.)
INSERT INTO TMP VALUES ("陈小二", "云南省", .F.)
INSERT INTO TMP VALUES ("李五", "中国 北京", .F.)
INSERT INTO TMP VALUES ("张小五", "北京市", .F.)

FOR i = 1 TO RECCOUNT()
    GO i
    c姓名 = 姓名
    c省份 = 省份
    bTag = .F.
    SKIP
    SCAN REST FOR !标志
        IF (DIFFERENCE(c姓名, 姓名) == 4) AND (DIFFERENCE(c省份, 省份) == 4)
            IF !bTag
                ?
                ? c姓名, c省份
                bTag = .T.
            ENDIF
            REPLACE 标志 WITH .T.
            ? 姓名, 省份
        ENDIF
    ENDSCAN
ENDFOR
2014-09-26 07:30
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1519
专家分:174
注 册:2006-6-3
得分:0 
以下是引用吹水佬在2014-9-25 22:39:04的发言:

 
 
CLEAR
CREATE CURSOR TMP (姓名 C(10), 省份 C(10))
INSERT INTO TMP VALUES ("张小三", "北京")
INSERT INTO TMP VALUES ("张小四", "北京市")
INSERT INTO TMP VALUES ("王小二", "天津")
INSERT INTO TMP VALUES ("王小四", "河北")
INSERT INTO TMP VALUES ("张三", "河北省")
INSERT INTO TMP VALUES ("王小三", "天津市")
INSERT INTO TMP VALUES ("赵四", "上海")
INSERT INTO TMP VALUES ("陈小小", "云南")
INSERT INTO TMP VALUES ("陈一二", "广西")
INSERT INTO TMP VALUES ("陈小二", "云南省")
INSERT INTO TMP VALUES ("李五", "中国 北京")
INSERT INTO TMP VALUES ("张小五", "北京市")
 
FOR i = 1 TO RECCOUNT()
    GO i
    c姓名 = 姓名
    c省份 = 省份
    bTag = .F.
    SKIP
    SCAN REST  
        IF (DIFFERENCE(c姓名, 姓名) == 4) AND (DIFFERENCE(c省份, 省份) == 4)
            IF !bTag 此处的btag为何值?
                ?
                ? c姓名, c省份
                bTag = .T.
            ENDIF
            ? 姓名, 省份
        ENDIF
    ENDSCAN
ENDFOR
IF !bTag 此时btag为何值?


[ 本帖最后由 sylknb 于 2014-9-26 11:23 编辑 ]
2014-09-26 11:22
五毒外星人
Rank: 2
等 级:论坛游民
威 望:1
帖 子:59
专家分:87
注 册:2014-5-7
得分:0 
可以按列1或列分别进行索引排序。

虚心学习,不断进步!
2014-09-26 14:09



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-436550-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 1.189708 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved