一个算法问题

先说说为什么会有这么一个需求,今天临下班时经理跟我说现在平台上的搜索不甚理想,原因在于我们的需求有点变态,整个就是违背了搜索引擎的宗旨,但 是没有办法,公司10年了都是这么走过来的,想招吧。根据现在公司内部人员的搜索习惯,搜索的功能就是像数据库里的like功能,不需要考虑别的,但是我 们都知道数据库查询其实不太提倡使用like关键字,我也说过solr也不提倡使用通配符查询,所以现在的问题就是你需要使用solr实现类似like的 功能但是不能使用通配符。既然这样,那就这样吧,比如数据库中有个字段值为“abcdefg你好java”,如果不分词做成索引之后变为“abcdefg 你好java”,使用分词做成索引就变成“abcdefg”,“你好”,"java"这三份索引,但是我们已经由于某种原因不能使用现在市面上已存的一些 分词工具,比如IK,mmseg4j等,因为他们都会将索引分成上面的那三份索引(这个不符合我们的需求)。所以我们现在要做的就是要实现一个自己的分词 工具,讨论到这里我有点压力大啊,因为据我所知分词工具是比较难实现的,可是我一想我们的需求是这样的:将”abcdefg“分成 ab,abc,abcd,abcde,abcdef,abcdefg,bc,bcd,bcde,bcdef,bcdefg,cd,cde,cdef,cdefg,de,def,defg,ef,efg,fg 这样的形式(其他的也一样),我觉得这样的分词是不是会更容易实现呢,这时候差不多要下班了,我就打算明天再来搞吧。于是下班走人,在地铁上回味了这个问 题,想了想大概思路,觉得有戏,于是拿出笔在一个名片上(包里只有一张名片可以写)写下了伪代码,流程走了遍可行,我的代码会在文章最后给出。

写到这里不知大家有没有什么思路,可以在回复中写下思路,不管什么思路都行,可能你的算法的效率会更高哦。

我的思路:

len=len("abcdefg")
for i in range(0, len):
    for j in range(2, len+1-i):
        print text[i:i+j]



Previous     Next
uohzoaix /
Published under (CC) BY-NC-SA in categories 算法  tagged with