所以我在离子项目中使用Ocrad.js库,以便能够从图像中读取文本。在应用程序中,用户可以将“项目”(如单词)添加到数组中,然后我想检查这些项目(单词)是否存在于图像的文本中。例如:如果图像有一个句子:'我喜欢足球'并且用户在列表中添加了'足球'这个词,只需按一下按钮,该应用程序就可以检查'我喜欢'中是否存在'足球'足球'并且会对用户这么说。在其他场合,它也会这样说。
到目前为止,我想出了这种情况:
for(let item of this.itemList) {
if(text.indexOf(item.name)>=0){
alert('word found');
} else {
alert('word not found');
}
}
这个想法是遍历用户添加到数组中的项目(单词)列表,并为它们提供适当的响应。如果我只添加一个单词,就像我上面提到的足球示例一样,如果我在列表中添加更多单词,那么循环显然会给我2个警报。因此,如果在列表中添加“足球”这个词,因此有一个带有'足球'和'足球'的阵列,我会得到2个警报,这是有道理的,因为我没有停止循环。所以我尝试了一个开关盒,由于某种原因不起作用(我不知道为什么,但它一直给我两个警报)。这就是我的开关的样子:
for(let item of this.itemList){
switch(true){
case (text.indexOf(item.name)>=0): {
alert('word found');
break;
}
case (text.indexOf(item.name) <= 0):{
alert('word not found');
break;
}
default: {
alert('please add a word to the list');
break;
}
}
}
所以在玩完并研究之后,我找不到能帮助我的东西。这个想法再次出现,如果图像文字说“我喜欢足球”,并且我在阵列中添加了3个项目:'足球',篮球','足球',答案只是'找到',而如果这个词不是在那里,我只会发现'找不到'一词!我相信我可能会做一些非常愚蠢的事情,因为我看不到我的新手的眼睛哈哈。我希望我的问题有道理。谁能帮我这个?干杯啦!
编辑 - 这是我实际使用相机功能的功能:
onAnalyze() {
let matchFound = false;
let loader = this.loadingCtrl.create({
content: 'Please wait...'
});
loader.present();
(<any>window).OCRAD(document.getElementById('image'), text => {
loader.dismissAll();
alert(text);
console.log(text);
for(const item of this.itemList)
{
if(text.indexOf(item) >=0){
matchFound = true;
break;
}
}
if(found){
alert('word found!');
} else{
alert('word not found!');
}
}
);
}
答案 0 :(得分:0)
你应该使用嵌套的for循环。
let words = ['soccer', basketball', 'football']
let foundedWords = []
for(let item of this.itemList) {
for(let word in words){
if(text.indexOf(word)>=0){
foundedWords.push(word)
alert('word found');
} else {
alert('word not found');
}
}
}
最后,您将获得已创建单词的列表。 我认为这应该没问题。
答案 1 :(得分:0)
在你提供的第一个例子中,for循环继续评估输入字符串,即使你已经找到匹配(我相信你想要的,只能看到任意数量的成功匹配的一个警报) )。以下示例引入了布尔值break
,在第一次匹配时设置为const itemList = ['football', 'nachos', 'sports'];
const textFromImage = 'I like football and nachos';
isTextPresent(itemList, textFromImage);
function isTextPresent(itemList: string[], textFromImage: string) {
let matchFound = false;
for (const item of this.itemList) {
if (textFromImage.indexOf(item) >= 0) {
matchFound = true;
break;
}
}
if (matchFound) {
alert('word found');
} else {
alert('word not found');
}
}
。如果找到匹配项,我们{for循环'textFromImage
,终止执行(并阻止N个警报):
const itemList = ['football', 'nachos', 'sports'];
const textFromImage = 'I like football and nachos';
isTextPresent(itemList, textFromImage);
function isTextPresent(itemList: string[], textFromImage: string) {
const matchFound = itemList.some((item: string) => {
return textFromImage.indexOf(item) >= 0;
});
if (matchFound) {
alert('word found');
} else {
alert('word not found');
}
}
FWIW,Array.prototype.some()也可以在这里使用。在{{1}}的第一个匹配中,它终止(非常类似于第一个示例中断开的for循环):
{{1}}