【问题标题】:Fuzzy pattern matching from emails in C#来自 C# 中电子邮件的模糊模式匹配
【发布时间】:2015-04-13 06:59:49
【问题描述】:

我正在寻找一种从电子邮件中提取数据位的方法。我主要查看主题行和电子邮件正文,并提取客户和订单参考号。

假设我是一家公司,客户可以发送电子邮件至 info@mydomain.com,他们可能会在电子邮件的主题行或正文中添加特定的客户编号或订单参考。但是,它们可能并不总是以最佳格式提供这些参考。我想提取数据,并返回数据有效可能性的概率。

我可以使用某种技术来尝试扫描电子邮件并返回可能的客户编号和/或具有一定概率的订单参考(有点像贝叶斯垃圾邮件过滤)?

我正在考虑某种正则表达式引擎,但这似乎太死板了。我也在查看NUML.net 并想知道它是否可以帮助我,但我有点超出我的深度,因为我不完全确定我需要什么。我遇到过 Levenshtein 算法,但这似乎是匹配两个固定字符串,而不是一个固定字符串和一个模式。

我正在想象一个有点像这样的 API:

// emailMessage is a Mandrill inbound object, in case anybody wonders
EmailScanResult results = EmailScanner.Scan(emailMessage, new {ScanType.CustomerNo, ScanType.OrderReference});
foreach (var result in results)
{
    var scanType = result.Type; // I.e. ScanType.CustomerNo
    var score = result.Score; // e.g. 1.2
    var value = result.Value; // CU-233454345-2321
}

对此的可能输入是多种多样的;例如。对于相同的客户编号:

  • DF-232322-AB2323
  • df-232322-AB2323
  • 232322-ab2323
  • 232322AB2323

什么样的算法对这样的任务有用?是否有为此推荐的 .NET 库,您是否知道任何合适的示例?

【问题讨论】:

    标签: c# regex machine-learning fuzzy-search


    【解决方案1】:

    如果我猜对了,您可以毫无问题地使用正则表达式。例如,对于您提供的输入样本,您可以使用如下正则表达式:

    ([A-Z|a-z]{2,2}-){0,1}\d{6,6}-{0,1}\d{4,4}

    • 第一部分获取 DF-df-,可能出现也可能不出现:([AZ|az]{2,2}- ){0,1}
    • 第二部分获取第一组数字:\d{6,6}
    • 然后,我们说它可以有一个破折号:\-{0,1}
    • 最后,我们得到最后一组数字:\d{4,4}

    这将涵盖您作为示例提供的值,但您也可以编写其他表达式来获取其他值。

    或者,也许,您可以使用 Lucene.net 之类的东西。据我所知,这对你也有帮助。
    http://pt.slideshare.net/nitin_stephens/lucene-basics
    http://jsprunger.com/getting-started-with-lucene-net/

    【讨论】:

      猜你喜欢
      • 2017-06-15
      • 2016-07-12
      • 1970-01-01
      • 2016-11-15
      • 2011-01-18
      • 2013-06-16
      • 2021-06-14
      • 2013-07-02
      • 1970-01-01
      相关资源
      最近更新 更多