python | 制作POI筛重程序中遇到的坑|文本模糊匹配、文件路径输入输出、exe封装、win7运行不成功、anaconda中easygui和levenshtein安装

 

目录

一、程序功能

二、功能实现

easygui——

levenshtein——

三、无关文本清洗

四、python封装exe

五、解决win7上运行不了的问题

六、程序包


一、程序功能​​​​​​​

因为得到的原始数据来自各个单位,可能存在POI重复记录或是同个POI命名不同、距离差了5、6米之类的,举个例子:

同一家肯德基,单位一交的数据命名为“肯德基(银泰店)”,经纬度数据是在这家肯德基的前门采集的;单位二交的数据命名为“肯德基(宁波镇海银泰店)”,经纬度在后门采集。这样导致两个POI数据实际上重复但人工难以筛查出来。

这个程序要做的是:

1、通过字符串模糊匹配先把“肯德基”匹配起来,不管你是在哪里的肯德基,先匹配在一起

2、距离筛选。我设置的距离阈值是150米,通过经纬度计算处出两个点之间 的距离方便后期人工筛查。那么最后输出的结果就是这样:

NAME1和NAME2分别是匹配上的两个POI,similar1和similar2是两种不同方法计算的模糊匹配度(后文会讲到),distance是两点距离(csdn可以找到经纬度计算距离的代码)

两个肯德基只差5m,能判断出来是同一家肯德基了吧!

(本数据仅作举例使用,并非真实数据)

二、功能实现

用到的库:

easygui——

非常非常小白的ui实现,我用这个来输入和输出原始excel表。通过以下代码,运行时会弹出对话框供用户选择输入的excel表和命名输出的excel表

    msg = '输入'
    title = '选择输入的excel文件'
    filename = '*'
    filetypes = ["*.xls"]
    fileinpath = easygui.fileopenbox(msg, title, filename, filetypes)

    msg2 = '输出路径选择'
    title2 = ''
    filename2 = '*.xls'
    filetype2 = ["*.xls"]
    fileoutpath2 = easygui.filesavebox(msg2, title2, filename2, filetype2)

levenshtein——

计算文本匹配度,有好几种算法。我用了ratio和jaro两种一起输出

sim1 = float(Levenshtein.ratio(str1, str2))
sim2 = float(Levenshtein.jaro(str1, str2))

 最终输出的匹配结果(dis是两点距离,单位是米):

 if dis < 150:

                if (
                        (sim1 > 0.6) or (sim2 > 0.7)
                ):
                    a = {'OBJECTID': O1, 'NAME': NAME[row], 'ADDRESS': AD1, 'POINT_X': lon[row], 'POINT_Y': lat[row],
                         'OBJECTID2': O2, 'NAME2': NAME[subRow], 'ADDRESS2': AD2, 'POINT_X2': lon[subRow],
                         'POINT_Y2': lat[subRow],
                         'similar1': sim1, 'similar2': sim2, 'distance': dis}

三、无关文本清洗

很多POI点后面会跟一长串后缀,这样就导致完全不相关的两个POI点会被匹配在一起,举个例子:

一点点(宁波镇海骆驼街道银泰百货店)

COCO(宁波镇海骆驼街道银泰百货店)

这两家店不是重复的,但是因为后面这一串文本太长,导致文本的匹配程度很高。

我的办法是另创建一个无关后缀库excel,先录入所在区域的这种大型商场后缀名。然后python读取,在进行文本模糊匹配前先删除这些无关后缀。 

四、python封装exe

刚开始我觉得这一步很简单。搞定easygui后就pyinstaller -F-w SelectPOI.py

很快啊!啪的一下就生成了!而且exe程序能成功运行!

但是当我兴高采烈地去把程序拷给带我的老师的时候,我发现,好像只能在win10电脑上运行。也就是说我辛辛苦苦编好了程序办公室里的老师们用不了,办公室里的电脑都是win7!只有我的电脑能用!

而我只是一个来寒假实习的小朋友,马上就走了……

五、解决win7上运行不了的问题

感谢CSDN上的各位博主,解决方法如下:

第一步:安装anaconda,在anaconda的终端把环境设置为32位,创建python3.7虚拟环境

set CONDA_FORCE_32BIT=1

可以使用 conda info 查看当前是64位还是32位

然后创建了个python3.7的虚拟环境。关于如何创建虚拟环境可以找到很多教程我就不赘述了。

 第二步:更换编译器,安装外部库

我是用的pycharm,File -  Settings 里更改

然后跟正常的编译一样,下载自己需要的库。

问题又来了!我下载不了easygui和levenshtein!

就是在那个 + 那里,根本搜不到这两个库。

easygui的安装也是在csdn上找到了教程,去官网下载了安装包后解压,然后在 + 号这里就能找到了。(我个人喜欢在pycharm里下载外部库不喜欢用 pip install)

这时候神奇的事情发生了,刚才没找到的levenshtein居然也出现了,我欢天喜地地下载,美美按下“Run”

报错: cannot import name '_levenshtein' from 'Levenshtein'

是leveinshtein 的_init_文件里报的错,我这种刚学python没几天的人咋知道怎么改!!!!

而且CSDN里居然也没找到这样的错误解决方法,倒是找到了几个anaconda安装levenshtein的教程。

我就先把编译器里的levenshtein卸了,哭唧唧去pip install

pip install之后报错没有VC++9.0的编译器!好办!是我见过的错误了!

又下载了VC++9.0的编译器,这个安装很傻瓜的无脑往下点就行

自此再无错误,成功运行,成功封装,成功在win7 32位的电脑山运行。

六、程序包

适合POI兴趣点数据处理工作,大大减少人工筛查的时间和工作难度。如有需要可私信联系我

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
在IDEA能够成功运行Maven项目,但在命令行却提示找不到程序包org.apache.poi.xssf.usermodel的原因可能是因为在IDEA使用了Maven的构建工具,而在命令行直接运行并没有正确设置依赖。 为了解决这个问题,可以按照以下步骤进行操作: 1. 在命令行进入Maven项目的根目录。 2. 确认项目根目录下是否存在pom.xml文件,该文件包含了项目的依赖配置。 3. 使用命令`mvn clean compile`来进行项目的编译,该命令会将项目依赖的库下载到本地仓库。 4. 验证是否成功下载依赖库,可以在本地仓库的目录(默认为用户目录/.m2/repository)查找对应的依赖库文件夹org/apache/poi/xssf/usermodel。 5. 如果步骤4找不到依赖库文件夹,可能是因为Maven的配置文件(默认为用户目录下的.settings文件夹)缺少了对于依赖库的配置。 6. 手动添加对于org.apache.poi.xssf.usermodel依赖的配置,在pom.xml文件添加以下内容: ```xml <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.17</version> </dependency> ``` 7. 再次运行命令`mvn clean compile`,确保依赖库正确下载。 8. 确认命令行是否已经能够正确运行程序。 通过上述步骤,应该能够解决在命令行找不到org.apache.poi.xssf.usermodel包的问题。这是因为IDEA默认会根据Maven的配置自动下载依赖库,并设置了正确的构建路径,而命令行需要手动配置和下载依赖库,确保程序能够正确运行

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唐唐唐吖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值