有一个学校专业的字符串,怎样识别出哪部分是学校名称和专业名称( Java 实现) - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
axwz88
V2EX    程序员

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

  •  
  •   axwz88 2019-09-27 00:32:48 +08:00 4674 次点击
    这是一个创建于 2286 天前的主题,其中的信息可能已经有所发展或是发生改变。
    比如一个字符串“北京大学软件工程”,“北京大学”和“软件工程”分别是学校名称和专业名称的变量,
    假如有 2000 个学校和 1000 个专业,怎么识别出哪一部分是学校名称,哪一部分是专业名称呢?
    用 2000 个学校去查询,再用 1000 个专业去查询,那查一次最多要查 3000 次,请问大家有没有好的解决方案。
    28 条回复    2019-09-27 13:06:54 +08:00
    OhYee
        1
    OhYee  
       2019-09-27 00:40:00 +08:00 via Android
    直接用大学或者学院把字符串分开就行吧,应该所有学校都是这俩词结尾吧
    RicardoY
        2
    RicardoY  
       2019-09-27 00:41:09 +08:00 via Android
    绝大部分学校按照大学和学院截断就可以解决问题了吧..截断以后查一下 hashset 确认一下是不是一个合法的解
    Enya
        3
    Enya  
       2019-09-27 00:44:47 +08:00 via iPhone
    先截学院,后截大学。

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

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

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

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

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

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

    先排序 按前几个字符分组,然后随便算算相同的前缀,找出学校名,然后院系就出来了。
    LudwigWS
        22
    LudwigWS  
       2019-09-27 11:46:01 +08:00
    V 站各路大神啊
    MaiKuraki
        23
    MaiKuraki  
       2019-09-27 12:17:57 +08:00
    正则表达式?
    wysnylc
        24
    wysnylc  
       2019-09-27 12:21:49 +08:00
    正则筛选+人工纠错
    换什么方式都逃不掉人工纠错
    yianing
        25
    yianing  
       2019-09-27 12:55:41 +08:00 via iPhone
    想到了最长前缀匹配,计算机网络学了这个匹配路由的,可以用来匹配学校吧
    axwz88
        26
    axwz88  
    OP
       2019-09-27 13:03:43 +08:00 via Android
    @aguesuka
    @nevin47
    @wmc
    @no1xsyzy

    感谢,用 ac 自动机可以高效实现,trie 树和 kmp 算法实现 ac 自动机,用 hashtable 对字符串碰撞也可以实现,受教了,没想到自己这么菜
    axwz88
        27
    axwz88  
    OP
       2019-09-27 13:06:38 +08:00 via Android
    每条回复我都认真看了,的确解决问题的方式不止一种,综合大家的回复我考虑用 ac 自动机去实现
    axwz88
        28
    axwz88  
    OP
       2019-09-27 13:06:54 +08:00 via Android
    感谢大家
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5331 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 08:27 PVG 16:27 LAX 00:27 JFK 03:27
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86