【问题标题】:Algorithm to match natural text in mail匹配邮件中自然文本的算法
【发布时间】:2012-04-20 05:55:08
【问题描述】:

在进一步处理之前,我需要将电子邮件中自然、连贯的文本/句子与列表、签名、问候语等分开。

示例:

嗨,汤姆,

上周一我们做了 bla bla,lore Lorem ipsum dolor sit amet,consectetur adipisici elit,sed eiusmod tempor incidunt ut labore et dolore magna aliqua。

  • 列出项目 2
  • 列出项目 3
  • 列出项目 3

Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquid x ea commodi consequat。 Quis aute iure reprehenderit 在 voluptate velit

问候,K。

---有趣的字符行-#######

示例公司

伦敦邪恶街 33 号

手机:00 234534/234345

理想情况下,算法只匹配粗体部分。

是否有任何推荐的方法 - 或者是否有针对该问题的现有算法?我应该根据标点符号的数量、长度等尝试近似正则表达式还是更多的统计数据?

【问题讨论】:

    标签: python regex algorithm nlp


    【解决方案1】:

    您将需要许多启发式方法来获得近似的解决方案,所以这里有一个:您可以安全地切断 sigdash(连字符-连字符-空格)之后的任何内容,符合标准的电子邮件用于分隔来自签名的消息正文。

    您可以使用的另一种方法是存储来自同一发件人的电子邮件副本;这应该允许您在每条消息中提取相同或相似的内容(例如称呼和签名)并检测他们的邮件客户端如何引用。

    【讨论】:

    • 存储不是一种选择。我已经实现了标准签名的东西。但不幸的是,我在野外没有看到很多符合标准的邮件:)
    【解决方案2】:

    您需要经过认真的 NLP 工作才能完成所需的处理(取决于您期望的精度水平以及代码输入电子邮件数据的随机性和模糊性)。

    阅读this 一个。有关其他相关内容,请参阅参考资料部分。

    This 处理不同的分类问题,但涉及对电子邮件文本的操作。

    【讨论】:

    • 啊,这是很棒的东西。我将尝试训练一个 SVM(或类似的)并对每个段落/逻辑块进行分类。如果我添加一些本文中提到的附加功能,效果会很好。
    【解决方案3】:

    如果您唯一的任务是找出粗体部分,请查看粗体文本在邮件数据库中的技术实现方式。 例如,如果它是 html,你可以有这样的东西:

    嗨,汤姆,

    上周一我们做了 bla bla,lore Lorem ipsum dolor sit amet, consectetur adipisici elit, sed eiusmod tempor incidunt ut labore et dolore magna aliqua。

    list item 2
    list item 3
    list item 3
    

    Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquid x ea commodi consequat。 Quis aute iure reprehenderit 在voluptate velit

    问候,K。

    ---有趣的字符行-#######

    然后就可以运行下面的代码了:

    import re
    # save the mail above as variable MailAbove
    print re.findall(r'<b>(.*?)</b>',MailAbove)
    

    结果:

    ['上周一我们做了 bla bla, lore Lorem ipsum dolor sit amet, consectetur adipisici elit, sed eiusmod tempor incidunt ut labore et dolore magna aliqua.', 'Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquid x ea commodi consequat。 Quis aute iure reprehenderit in voluptate velit']

    编辑:从评论中可以看出我误解了这个问题。通常,此类任务是一个多阶段的过程:您应用一些方法,然后查看结果以及遗漏或错误的内容,然后进行修复或添加新方法并查看结果。
    我建议你阅读this - 一本关于解决像你这样的任务以及其他任务的优秀教程/书籍。

    【讨论】:

    • 那将是微不足道的 - 恐怕我只是为了更好地理解而突出显示了这部分;)
    【解决方案4】:

    在您发布的示例中,行长就足够了。

    没有完美的算法;甚至人类也会对线条进行不同的分类。

    我建议在找到反例之前只使用行长,然后修改你的算法。重复直到问题解决到您满意为止。

    【讨论】:

    • 为什么这是一个糟糕的问题?我正在寻找处理自然文本这一特定问题的方法。也许我错过/没有找到的一些学术研究是关于这个主题的。我知道没有通用的方法。
    • 不是一个“坏问题”,而是一个无法解决的问题。
    • 我和@snoreven 在一起;这是一个很难(因此很有趣)的问题,不是一个坏问题。
    猜你喜欢
    • 2010-11-09
    • 1970-01-01
    • 2013-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-08
    • 1970-01-01
    • 2018-10-11
    相关资源
    最近更新 更多