有一个学校专业的字符串,怎样识别出哪部分是学校名称和专业名称( Java 实现)

2019-09-27 00:32:48 +08:00
 axwz88
比如一个字符串“北京大学软件工程”,“北京大学”和“软件工程”分别是学校名称和专业名称的变量,
假如有 2000 个学校和 1000 个专业,怎么识别出哪一部分是学校名称,哪一部分是专业名称呢?
用 2000 个学校去查询,再用 1000 个专业去查询,那查一次最多要查 3000 次,请问大家有没有好的解决方案。
3757 次点击
所在节点    程序员
28 条回复
OhYee
2019-09-27 00:40:00 +08:00
直接用大学或者学院把字符串分开就行吧,应该所有学校都是这俩词结尾吧
RicardoY
2019-09-27 00:41:09 +08:00
绝大部分学校按照大学和学院截断就可以解决问题了吧..截断以后查一下 hashset 确认一下是不是一个合法的解
Enya
2019-09-27 00:44:47 +08:00
先截学院,后截大学。

因为会有类似北京航空航天大学大学北海学院这种存在。
lihongming
2019-09-27 00:52:27 +08:00
用 SVM 吧,万一有很多不按规则说话的呢?
axwz88
2019-09-27 00:57:30 +08:00
@OhYee
@RicardoY
@Enya
感谢回复,截断的确是个最直接的方法,但很多学校名称不规则,比如"XX 集团 XX 所",还有些大学有注释,比如"中国石油大学(华东)",所以这种办法就行不通了。
Yourshell
2019-09-27 01:06:40 +08:00
想匹配不规则字符串的话只有 ml 之类的了
aguesuka
2019-09-27 01:10:26 +08:00
所有大学,塞一个 trietree 里面,先匹配大学,后面的就是专业课。嫌麻烦可以用 treemap
AX5N
2019-09-27 02:52:35 +08:00
2000 个学校不算多,我觉得直接预先把所有学校拉出来最好。
wmc
2019-09-27 03:13:48 +08:00
想起《数学之美》中 Google 地图关于地址信息的解析,这应该算是一种比较简单的上下文有关文法,Google 的做法是用自动机来进行 街道->地区->城市->州 的各个部分的匹配,感觉思路可能比较接近🤔
littlecap
2019-09-27 05:51:29 +08:00
先下载一个高校库,然后匹配一下就好了。如果需要我可以发给你。
mcorley
2019-09-27 08:52:21 +08:00
excel 导出,分列,剩下几十个特殊的手动一下就好了
nevin47
2019-09-27 08:55:56 +08:00
我要把这个帖子转给我的同事哈哈哈哈。

自从我司开始考试,我就天天听到一个论调就是考算法的东西完全没用😂😂😂终于发现一个实际问题了

这个问题如果不用数据库的话,绝对用 hash 最快啊,逐一阶段,然后去 hash 里面比对,就立刻找到属于哪个学校了
passerbytiny
2019-09-27 09:01:43 +08:00
人是怎么处理的,程序就怎么处理,以下为自动化层次逐步增高的几种方式:
逐条手工识别和拆分

按已知规则自动拆分,然后人工逐条审核和纠正

同上,每次审核后再将新发现的规则融合到拆分规则中(已初步是 AI )

上一层次执行多次后,将审核、融合新规则也弄成程序自动处理(已是 AI 或者人工智障)
passerbytiny
2019-09-27 09:06:32 +08:00
@nevin47 #11 ⁉ hash 还能部分匹配原文?
zenan9001
2019-09-27 09:06:42 +08:00
先考虑通用情况,把"大学"作为截断关键字,再考虑特殊情况,括号什么的比较少,可以特殊处理
no1xsyzy
2019-09-27 09:10:57 +08:00
@passerbytiny
做 hashtable,然后拿部分去判断。
能从 3000 降到 length(输入字符串)^2
dog82
2019-09-27 09:11:16 +08:00
先粗匹配学校,然后人肉修正一遍,专业的名字用正则就行
RicardoY
2019-09-27 09:11:53 +08:00
@aguesuka 用 trie 确实是一个好办法
no1xsyzy
2019-09-27 09:13:19 +08:00
@passerbytiny BTW,你的世界不完整,推荐用 Red 而不是 Block /t/592670 /t/596604
LeeSeoung
2019-09-27 09:24:28 +08:00
正则。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/604605

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX