You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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}");
        }
    }
}

代码说明

  1. 文本清理:先移除已知的无关前缀和后缀,减少干扰项
  2. 目标键匹配:通过预定义的键列表,支持大小写不敏感的匹配,适配OCR可能出现的大小写偏差
  3. 值提取逻辑:遇到目标键后,持续收集后续单词,直到碰到下一个目标键为止,确保多单词的值(如"6-98 india")能被完整提取
  4. 格式适配:自动将值的首字母大写,匹配示例输出的格式要求

内容的提问来源于stack exchange,提问作者coder rock

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 02:15:27