7

我想知道如果删除了空格,将如何用英语(或其他西方语言)标记字符串?

这个问题的灵感来自村上小说《舞舞舞》中的羊人角色

在小说中,羊人被翻译成这样说:

“就像我们说的,我们会做我们能做的。试着把你重新连接到你想要的,”羊人说。“但我们不能一个人做。你也得工作。”

因此,保留了一些标点符号,但不是全部。足以让人类阅读,但有些武断。

您为此构建解析器的策略是什么?字母、音节计数、条件语法、前瞻/后置正则表达式等的常见组合?

具体来说,python 方面,您将如何构建(宽容的)翻译流程?不是要求一个完整的答案,而是更多你的思考过程将如何分解问题。

我以一种轻浮的方式问这个问题,但我认为这个问题可能会得到一些有趣的(nlp/crypto/frequency/social)答案。谢谢!

4

4 回答 4

4

实际上,大约八个月前,我为工作做了类似的事情。我只是在哈希表中使用了一本英语单词词典(对于 O(1) 查找时间)。我会逐个字母匹配整个单词。它运作良好,但有许多模棱两可的地方。(asshit 可以是 ass hit 或 as shit)。要解决这些歧义,需要更复杂的语法分析。

于 2010-10-03T22:12:20.667 回答
2

首先,我认为您需要一本英语单词词典——您可以尝试一些仅依赖于一些统计分析的方法,但我认为词典更有可能获得好的结果。

一旦你有了这些词,你就有两种可能的方法:

您可以将单词分类为语法类别并使用正式语法来解析句子-显然,有时您会找不到匹配项或多个匹配项-我不熟悉可以让您放松语法规则的技术,以防万一不匹配,但我敢肯定一定有一些。

另一方面,您可以只获取一些大型英文文本语料库并计算某些单词彼此相邻的相对概率——得到一个单词对和三组的列表。由于该数据结构相当大,您可以使用单词类别(语法和/或基于含义)来简化它。然后你只需构建一个自动机并选择单词之间最可能的转换。

我相信还有更多可能的方法。您甚至可以将我提到的两者结合起来,构建某种语法,并为其规则附加权重。这是一个丰富的实验领域。

于 2010-10-03T22:16:19.097 回答
1

我不知道这对您是否有很大帮助,但您也许可以以某种方式使用此拼写校正器。

于 2010-10-04T00:41:25.060 回答
1

这只是我写的一些快速代码,我认为可以很好地从一个片段中提取单词,就像你给出的那个......它没有完全考虑过,但我认为如果你不能,这些方面的东西会起作用查找预包装类型的解决方案

 textstring = "likewesaid, we'lldowhatwecan. Trytoreconnectyou, towhatyouwant," said the Sheep Man. "Butwecan'tdoit-alone. Yougottaworktoo."

indiv_characters = list(textstring) #splits string into individual characters

teststring = ''
sequential_indiv_word_list = []

for cur_char in indiv_characters:
    teststring = teststring + cur_char
    # do some action here to test the testsring against an English dictionary where you can API into it to get True / False if it exists as an entry
    if in_english_dict == True:
        sequential_indiv_word_list.append(teststring)
        teststring = ''

#at the end just assemble a sentence from the pieces of sequential_indiv_word_list by putting a space between each word

还有一些问题需要解决,例如如果它永远不会返回匹配项,这显然不起作用,因为如果它只是不断添加更多字符,它将永远不会匹配,但是由于您的演示字符串有一些空格,您可以拥有它也可以识别这些并自动从每个开始重新开始。

您还需要考虑标点符号,编写条件,例如

if cur_char == ',' or cur_char =='.':
   #do action to start new "word" automatically
于 2010-10-04T00:50:08.010 回答