android 输入模糊匹配_java – Android&模糊匹配,n-gram和Levenshtein距离

我正在构建一个Android应用程序,它采用字符串输入并使用Google API返回排名的书籍列表.

我正在寻找一种方法来比较用户输入的开放式字符串,以及列表中的第一项,以查看他们输入的内容是否“可能”是一本书.我有大量关于书籍,标题,作者,描述等的信息,所以我可以搜索任何部分.

一个例子是:

'eyre affair fforde', 'fforde eyre affair', 'the eyre affair'

---->

'Likely' to be 'The Eyre Affair by Jasper Fforde'

最好的方法是什么?我已经看过levenshtein距离,但是不认为它可以用这种开放式输入,n-gram似乎是一个很好的方法,或模糊匹配.

还有其他想法吗?

解决方法:

我会选择其中一个:

SimMetrics(SimMetrics是一个开源可扩展的相似度或距离度量库,例如Levenshtein距离,L2距离,余弦相似度,Jaccard相似度等等)

标签:java,android,levenshtein-distance,fuzzy-search,n-gram

来源: https://codeday.me/bug/20190526/1156777.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
n-gram模糊匹配是一种在文本中进行模糊匹配的方法,适用于处理拼写错误、错别字或者词序错误等情况。在Python中,我们可以使用nltk库来实现n-gram模糊匹配。 首先,我们需要导入nltk库以及相关的数据文件: ``` import nltk from nltk.util import ngrams nltk.download('punkt') ``` 接下来,我们可以定义一个函数,用于进行n-gram模糊匹配: ``` def ngram_fuzzy_match(query, text, n): query = query.lower() tokenized_query = nltk.word_tokenize(query) tokenized_text = nltk.word_tokenize(text.lower()) ngrams_query = list(ngrams(tokenized_query, n)) ngrams_text = list(ngrams(tokenized_text, n)) match_count = 0 for gram in ngrams_query: if gram in ngrams_text: match_count += 1 return match_count / len(ngrams_query) ``` 在这个函数中,我们首先将待匹配的查询和文本都转换为小写,并通过`nltk.word_tokenize()`函数将它们分词。然后,我们使用`nltk.util.ngrams()`函数生成n-gram序列。 接着,我们遍历查询中的每个n-gram,并判断它是否在文本中,如果存在,则匹配数加1。 最后,我们返回匹配数除以查询中的n-gram数,作为模糊匹配的相似度得分。 我们可以通过以下代码测试该函数: ``` query = "苹果手机" text = "我有一个苹果手机" n = 2 similarity_score = ngram_fuzzy_match(query, text, n) print(similarity_score) ``` 运行这段代码,输出的相似度得分将会是0.5,表示匹配了一半的n-gram。 以上就是n-gram模糊匹配的简单实现方法,通过调整n值可以控制匹配的精度,需要注意的是,n值过大可能会导致计算量增大,因此需要根据具体情况选择合适的值。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值