我想知道如果删除空格,你如何用英语(或其他西方语言)标记字符串?
问题的灵感来自于村上小说“Dance Dance Dance”
中的“羊人”角色在小说中,“羊人”被翻译为:
“比如说,我们可以说,我们可以了。试试看,你想要,”羊人说道。 “但是我们不能独自一人。你们工作得很好。”
因此,保留了一些标点符号,但不是全部。足以让人阅读,但有些武断。
为此构建解析器的策略是什么?字母,音节计数,条件语法,前瞻/后退regexp等常见组合?
具体来说,蟒蛇方式,你将如何构建一个(宽容的)翻译流程?不要求完整的答案,更多的是你的思维过程将如何解决问题。
我以轻浮的方式问这个问题,但我认为这个问题可能会得到一些有趣的(nlp / crypto / frequency / social)答案。 谢谢!
答案 0 :(得分:3)
我实际上在八个月前做过类似的工作。我只是在哈希表中使用了英语单词字典(用于O(1)查找时间)。我会逐字逐句地写出来。它运作良好,但有很多含糊之处。 (asshit可以是屁股或作为狗屎)。要解决这些含糊之处,需要更复杂的语法分析。
答案 1 :(得分:2)
首先,我认为你需要一个英语单词词典 - 你可以尝试一些单纯依赖于某些统计分析的方法,但我认为一本词典有更好的结果。
一旦掌握了这些词语,您就有两种可能的方法:
您可以将单词分类为语法类别并使用正式语法来解析句子 - 显然,您有时会得不到匹配或多次匹配 - 我不熟悉可以让您放松语法的技巧如果不匹配,我会确定必须有一些。
另一方面,你可以拿一些大的英文文本语料库来计算某些单词彼此相邻的相对概率 - 获得一对词和三元组的列表。由于该数据结构相当大,您可以使用单词类别(语法和/或基于含义)来简化它。然后你只需构建一个自动机并选择单词之间最可能的转换。
我相信还有更多可行的方法。你甚至可以将我提到的两个结合起来,建立某种与其规则相关的重量的语法。这是一个丰富的实验领域。
答案 2 :(得分:1)
我不知道这对你有多大帮助,但你可以用某种方式使用this spelling corrector。
答案 3 :(得分: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