所以我正在使用谷歌相机api为OCR创建一个光学文本阅读器。当从相机中取出时,我希望通过将读取的字符串与字符串列表进行匹配来过滤读取的字符串,如果读取的字符串部分匹配,则列表中的项目将被添加并显示。
除了过滤之外的所有工作。
说我有一个包含字符串的列表:
"BigSizeScrew 45**"
我想匹配读取字符串:
"BigSizeScrew"
...到具有数字的那个,然后添加包含该数字的字符串。
数字和星星是另一个原因,但必须保留,原因与问题无关。
TL; DR:
如何匹配将字符串与列表中的现有字符串部分匹配?
我有以下内容,但它专门搜索100%匹配的字符串,而不是检查字符串是否包含读取字符串的子字符串。
for(int i =0;i<items.size();++i){
if (list.contains(items.valueAt(i))) {
TextBlock item = items.valueAt(i);
stringBuilder.append(item.getValue());
stringBuilder.append("\n");
}
}
编辑:
该列表包含大约200个不同的字符串,这些字符串应该部分匹配。但都是以同样的方式;部分匹配主要字符串,但不匹配数字/星星。
答案 0 :(得分:1)
您可以通过添加if
条件来执行此类操作:
for(int i =0;i<items.size();++i){
if (list.contains(items.valueAt(i))) {
TextBlock item = items.valueAt(i);
if(item.getValue().indexOf("Your String") > -1){
stringBuilder.append(item.getValue());
stringBuilder.append("\n");
}
}
}
代替your string
使用您要搜索的字符串值。
答案 1 :(得分:1)
使用indexOf()方法。方法索引给出匹配字符串的索引。所以它的值大于-1,这意味着列表中存在搜索字符串,你可以使用该字符串。
答案 2 :(得分:1)
您可以使用startsWith
的{{1}}方法。如果String
的值为ocrString
,则执行BigSizeScrew 45**
循环到列表中,并匹配要匹配的字符串,for
。
答案 3 :(得分:0)
我想你可能真的想要一个模糊的句子匹配器。如果光学器件未捕获字母,则需要插入它们可能的内容。它进入NLP但可能是正确的实施方式。
以下是Smith-Waterman维基百科的链接:https://en.wikipedia.org/wiki/Smith%E2%80%93Waterman_algorithm
Leveshtein距离: https://en.wikipedia.org/wiki/Levenshtein_distance
有各种实现和库可以在每个语句读取时执行单个函数调用。 “本地句子对齐”是您要解决的问题。当涉及屏幕阅读器时,请忘记完全匹配,预计会出现人为和计算机错误。