【问题标题】:Split String When Words Joined Without Delimiter没有分隔符的单词连接时拆分字符串
【发布时间】:2015-05-15 17:47:58
【问题描述】:

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

  1. configuredincorrectly - 两个词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 - 两个词problem & possible

我承认我们正在尝试解决这里的多个问题。编写不可扩展的代码很诱人,例如

  1. 正则表达式每次我们尝试解决特定的脏文本场景
  2. string.replace(keyword,keywordwithSpace)

谁能指出问题 1 和 2 的(部分)解决方案?

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

提前非常感谢!

【问题讨论】:

  • 你不能在这里使用正则表达式..

标签: regex python-2.7 nlp text-mining


【解决方案1】:

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

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

"每个汉字都可以指定四种可能的边界之一 标签: S 表示作为单字符单词出现的字符, B 表示以多字符单词开头的字符,E 表示以多字符单词结尾的字符,以及 M 对于一个字符 既不是第一个也不是最后一个”

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

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

请注意:开发任何机器学习解决方案都可能非常耗时,有时甚至根本无法工作,尤其是如果您以前从未这样做过。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-09-11
      • 2012-11-07
      • 1970-01-01
      • 1970-01-01
      • 2013-06-28
      • 2021-09-07
      • 2014-11-28
      相关资源
      最近更新 更多