2015-03-13 78 views
0

我们有很多文字(大部分是用英文书写的),这些文字被错误地导入(来自我们无法控制的)。例如拆分字符串当没有分隔符加入的词

  1. configuredincorrectly - 到2个字configured & incorrectly
  2. RegardsJohn Doe - 成字Regards和命名实体John Doe
  3. To: [email protected]:[email protected]:[email protected] - 成3元组(To,[email protected])(CC,[email protected])(BCC,[email protected])
  4. problem.Possible - 成2字problem & possible

我承认我们正在努力解决这里的多个问题。人们很容易写不可扩展的代码每次我们试图解决特定肮脏的文本方案时间如

  1. 正则表达式,
  2. 与string.replace(关键字,keywordwithSpace)

任何人都可以请我指向一个(部分)解决方案的问题1 & 2?

使用自然语言理解的解决方案将是最理想的。 我们的词汇量有1000字左右,如[沟通,数据库,硬件,网络,问题,纠正,解决方案等]。有没有一种方法可以“训练”一个模型,以识别像hardwarefailure这样的词真的意味着2个单独的词hardware & failure

非常感谢提前!

+0

你不能在这里使用正则表达式.. – 2015-03-13 09:39:41

回答

2

某些语言(如中文)在单词之间没有空格(或其他分隔符)。因此,我认为,为分割此类语言而开发的方法在此处可能很有用(请参阅this paper,例如系统说明以及this one)。

的基本想法是,我们训练一些分类字符分类:

每一个中国字可以分配的四种可能的边界 标签之一:小号一个字符出现作为一个单一的个字符数字, 为开始多字符单词的字符,则该端部的多字符单词字符ë,和中号一个字符 既不是第一个也不是最后一个”

分类可以最大熵模型,条件随机场,反复发作的神经网络,或者其它一些。实现它们的代码很容易作为独立程序和(对于许多分类器)作为python库/绑定来使用。谷歌搜索应该揭示其中的很多。

因此,我们可以采取大量损坏的文本(可以很容易地生成)并为每个字母分配标签(如果我们从原始表单生成损坏的文本,可以自动完成)。这将给我们提供训练集,尽可能大。对于字符串中的每个字符,我们需要生成特征向量(通常包括有关先前字符的信息,但我们可以添加一些基于字典的特征)。在运行时,我们可以首先标记字符串,如“hardwarefailure”,并将其分割为标有“B”的字符。

需要注意的一点是:开发任何机器学习解决方案可能非常耗时,有时可能无法工作,尤其是如果您以前从未这样做过。

1

对于包含链接到Python ICU library的相同问题,有answer

Python中有working code基于字典与频率。

也请看this question:作者已经开发出工作解决方案 - 它是用Java编写的,但是开源并且有文档。