如何用C#从Tesseract OCR识别的字符串精准提取指定键值对
从OCR识别文本中精准提取指定键值对的C#解决方案
问题场景
从Tesseract OCR生成的文本中提取指定键值对,需过滤无关内容:
输入示例:
logo Name raj mobile 9038874774 address 6-98 india bill auto generated期望输出:
[0] Key: Name value:Raj [1] Key: Mobile value:9038874774 [2] Key: Address value:6-98 india
解决方案代码
using System; using System.Collections.Generic; using System.Linq; class OcrKeyValueExtractor { static void Main() { string ocrInput = "logo Name raj mobile 9038874774 address 6-98 india bill auto generated"; // 定义需要提取的目标键(支持大小写不敏感匹配) var targetKeys = new List<string> { "Name", "Mobile", "Address" }; // 定义需过滤的无关前缀和后缀 string filterPrefix = "logo"; string filterSuffix = "bill auto generated"; // 第一步:清理文本,移除无关内容 string cleanedText = ocrInput.Replace(filterPrefix, "").TrimStart(); cleanedText = cleanedText.Replace(filterSuffix, "").TrimEnd(); // 第二步:拆分文本为单词数组,剔除空项 string[] wordTokens = cleanedText.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); // 第三步:遍历提取目标键值对 var resultPairs = new List<KeyValuePair<string, string>>(); int currentPos = 0; while (currentPos < wordTokens.Length) { string currentToken = wordTokens[currentPos]; // 匹配目标键(忽略大小写) var matchedKey = targetKeys.FirstOrDefault(k => string.Equals(k, currentToken, StringComparison.OrdinalIgnoreCase)); if (matchedKey != null) { currentPos++; // 收集值直到遇到下一个目标键或文本结束 var valueSegments = new List<string>(); while (currentPos < wordTokens.Length && !targetKeys.Any(k => string.Equals(k, wordTokens[currentPos], StringComparison.OrdinalIgnoreCase))) { valueSegments.Add(wordTokens[currentPos]); currentPos++; } // 拼接值并添加到结果列表 string finalValue = string.Join(" ", valueSegments); // 将值的首字母大写(匹配示例输出格式) finalValue = char.ToUpper(finalValue[0]) + finalValue.Substring(1); resultPairs.Add(new KeyValuePair<string, string>(matchedKey, finalValue)); } else { currentPos++; } } // 按要求格式输出结果 for (int i = 0; i < resultPairs.Count; i++) { var pair = resultPairs[i]; Console.WriteLine($"[{i}] Key: {pair.Key} value:{pair.Value}"); } } }
代码说明
- 文本清理:先移除已知的无关前缀和后缀,减少干扰项
- 目标键匹配:通过预定义的键列表,支持大小写不敏感的匹配,适配OCR可能出现的大小写偏差
- 值提取逻辑:遇到目标键后,持续收集后续单词,直到碰到下一个目标键为止,确保多单词的值(如"6-98 india")能被完整提取
- 格式适配:自动将值的首字母大写,匹配示例输出的格式要求
内容的提问来源于stack exchange,提问作者coder rock
相关产品推荐
相关产品推荐

