很纠结的一个问题,java中的字符串怎样高效查找是否有某子串?

qinbaowei 2019-09-27 12:24:01
比如一个字符串“北京大学软件工程”,“北京大学”和“软件工程”分别是学校名称和专业名称的变量,
假如有2000个学校和1000个专业,怎么识别出哪一部分是学校名称,哪一部分是专业名称呢?
用2000个学校去查询,再用1000个专业去查询,那查一次最多要查3000次,有没有什么高效的算法呢?
...全文
249 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
silent_xiangyang 2019-09-28
  • 打赏
  • 举报
回复
不分类的话 都要匹配1-3000次吧,效率只是说你用啥方法去匹配 分N组同时进行啥的,节省时间
tianfang 2019-09-28
  • 打赏
  • 举报
回复
这个不是简单的搜索 预处理: 自动处理:使用分词,如离线的结巴分词, 在线的百度分词。分离出学校名称词组,可能会存在 学校/学院两级,如 北京大学信息学院 异常处理:特殊的缩写,如北大=北京大学等 做几次预处理后,做成学校/学院的数据库。 正式处理: 分词,和数据库比较,分离学校和专业
qq_39936465 2019-09-27
  • 打赏
  • 举报
回复
引用 楼主 qinbaowei 的回复:
比如一个字符串“北京大学软件工程”,“北京大学”和“软件工程”分别是学校名称和专业名称的变量, 假如有2000个学校和1000个专业,怎么识别出哪一部分是学校名称,哪一部分是专业名称呢? 用2000个学校去查询,再用1000个专业去查询,那查一次最多要查3000次,有没有什么高效的算法呢?
可以找点规律,好比都有大学2个字

public class test1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String s="北京大学软件工程";
		int i=s.indexOf("大学");
		String s1=s.substring(0, i+2);
		String s2=s.substring(i+2);
		System.out.println(s1+"\t"+s2);
	}

}

北京大学	软件工程
柯南在写代码 2019-09-27
  • 打赏
  • 举报
回复
首先所有算法在计算的时候, 使用的数据都需要经过加工(预处理). 如题, 我们需要做的第一件事情是将学校和学院两部分数据进行一个区分. 怎么作区分这个问题特别好. 数据的有效性验证. 可通过基本的名名次验证或通过 足够全面的数据基准进行验证. 这3000个数据的内容, 谁是谁程序怎么知道, 这就需要你 赋予它这个能力, 给他一个标准. 标准来自哪里? 你可以叫提供数据方给你提供, 也可自行 匹配, 如果将继续考虑这个问题, 还要区分出专业名称, 因为专业名称是属于一个学校的. 这个学院大同小异但有些却各有不同. 更细的区分要将每个专业对应到每个学校.
usecf 2019-09-27
  • 打赏
  • 举报
回复
查找算法多的很,看看数据结构 https://blog.csdn.net/jekcai/article/details/80357294
十八道胡同 2019-09-27
  • 打赏
  • 举报
回复
查3000次 又不多,能用傻逼代码搞定的事情 就不要搞得高大上
oh_Maxy 2019-09-27
  • 打赏
  • 举报
回复
有个比较暴力的方法,就是把所有的学校和专业录入到词库里,一一匹配。。
oh_Maxy 2019-09-27
  • 打赏
  • 举报
回复
头像和我QQ头像一样。。
刚一进来还纳闷,我啥时候发过这个帖子的。。
northwesternwind 2019-09-27
  • 打赏
  • 举报
回复
先用大学查,匹配之后把字符串里面大学删掉,就剩下专业了。

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧