我们有很多文本(大多数是用英文写的)导入错误(来自我们无法控制的来源)。例如
configuredincorrectly
- 改为2个字configured
& incorrectly
RegardsJohn Doe
- 单词Regards
和命名实体John Doe
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)
problem.Possible
- 改为2个字problem
& possible
我承认我们正在努力解决这里的多个问题。编写不可扩展的代码很有诱惑力,例如
任何人都可以请我指出一个(部分)问题解决方案1& 2?
利用自然语言理解的解决方案将是最理想的。
我们的词汇量大约有1000个单词,例如[通信,数据库,硬件,网络,问题,纠正,解决方案等]。有没有办法我们可以培训"一个模型,用于识别像hardwarefailure
这样的单词实际上意味着两个单独的单词hardware
& failure
。
非常感谢提前!
答案 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编写的,但是是开源的,并且有文档。