单词加入时没有分隔符的分割字符串

时间:2015-03-13 09:38:15

标签: regex python-2.7 nlp text-mining

我们有很多文本(大多数是用英文写的)导入错误(来自我们无法控制的来源)。例如

  1. configuredincorrectly - 改为2个字configured& incorrectly
  2. RegardsJohn Doe - 单词Regards和命名实体John Doe
  3. To: person1@example.comCC:addr2@example.co.ukBCC:person3@example.sg - 分为3个元组(To,person1@example.com)(CC,addr2@example.co.uk)(BCC,person3@example.sg)
  4. problem.Possible - 改为2个字problem& possible
  5. 我承认我们正在努力解决这里的多个问题。编写不可扩展的代码很有诱惑力,例如

    1. 每次我们尝试解决特定脏文本场景时的正则表达式
    2. 与string.replace(关键字,keywordwithSpace)
    3. 任何人都可以请我指出一个(部分)问题解决方案1& 2?

      利用自然语言理解的解决方案将是最理想的。 我们的词汇量大约有1000个单词,例如[通信,数据库,硬件,网络,问题,纠正,解决方案等]。有没有办法我们可以培训"一个模型,用于识别像hardwarefailure这样的单词实际上意味着两个单独的单词hardware& failure

      非常感谢提前!

2 个答案:

答案 0 :(得分:2)

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

基本思想是我们训练一些分类器来分类字符:

  

每个中文字符可以分配四个可能的边界之一   标签: S 表示作为单字符单词出现的字符,    B 表示开始多字符单词的字符, E 表示结束多字符单词的字符 M 对于一个角色   这不是第一个也不是最后一个“

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

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

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

答案 1 :(得分:1)

同一个问题answer包含指向Python ICU library的链接。

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

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