我做了很多的搜索这一点,这里是我发现。基本上有两种情况下,你是这样做的:当你有整个线程,而你不。我会把它分成两类:
当你有线程:
如果你有整个系列的电子邮件,你可以实现一个非常高水平的保证,你正在删除实际上是引用的文本。有两种方法来做到这一点。一个,您可以使用消息的Message-ID,In-Reply-To ID和Thread-Index来确定单个消息,它的父级以及它所属的线程。有关这方面的更多信息,请参阅RFC822,RFC2822,this interesting article on threading或this article on threading.一旦你重新组装线程,然后可以删除外部文本(例如To,From,CC等…行)重做。
如果您使用的邮件没有标题,您还可以使用相似性匹配来确定电子邮件的哪些部分是回复文本。在这种情况下,你会坚持进行相似性匹配来确定重复的文本。在这种情况下,您可能需要查看一个Levenshtein Distance algorithm,如this one on Code Project或this one。
当你没有线程:
如果你只停留在线程中的一个消息,你在做,必须试着猜测报价是什么。在这种情况下,我看到了不同的报价方法:
>一条线(如在outlook中看到的)。
>角括号
>“—原始信息—”
>“在这样的日子,so-and-so写道:”
从那里删除文本,你就完成了。任何这些的缺点是,他们都假设发件人将他们的答复在引用的文本的顶部,并没有交织它(像在互联网上的旧风格)。如果发生,祝你好运。我希望这有助于你们有些人!