标记串联字符串

2024-04-28 07:54:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我得到了一组字符串,其中包含如下串联的单词:

longstring (two English words)
googlecloud (a name and an English word)

当我在Google中输入这些术语时,它会识别出带有“did you mean?”(“长字符串”,“谷歌云”)。我需要在我的应用程序类似的功能。你知道吗

我研究了Python和ElasticSearch提供的选项。我发现的所有标记化示例都基于空格、大写、特殊字符等

如果字符串是英文的(但可能包含名称),我的选项是什么?它不一定是在特定的技术上。你知道吗

我能用googlebigquery完成这个吗?你知道吗


Tags: and字符串nameanenglish选项google单词
2条回答

您是否也可以推出自己的实现?我在想这样一个算法:

  1. 找一本字典,里面有你想区分的所有单词
  2. 构建一个允许快速查找的数据结构(我在考虑一个^{}
  3. 试着找到第一个单词(从一个字符开始,一直增加到找到一个单词为止);如果找到了,则使用剩余的字符串,并执行相同的操作,直到什么都没有留下。如果找不到任何东西,回溯并扩展前面的单词。你知道吗

如果字符串可以拆分,应该是可以的,但是如果它是乱七八糟的,会尝试所有的可能性。当然,这要看你的字典有多大。但这只是一个简单的想法,也许有帮助。你知道吗

如果选择使用BigQuery解决此问题,则以下是备选解决方案:

  1. 将所有可能的英语单词列表加载到名为words的表中。例如,https://github.com/dwyl/english-words有大约350000个单词的列表。互联网上也有其他免费的数据集(如WordNet)。

  2. 使用标准SQL,对候选列表运行以下查询:

SELECT first, second FROM ( SELECT word AS first, SUBSTR(candidate, LENGTH(word) + 1) AS second FROM dataset.words CROSS JOIN ( SELECT candidate FROM UNNEST(["longstring", "googlecloud", "helloxiuhiewuh"]) candidate) WHERE STARTS_WITH(candidate, word)) WHERE second IN (SELECT word FROM dataset.words)

在本例中,它产生:

Row first   second   
1   long    string   
2   google  cloud

即使是非常大的英文单词列表也只有几MB,所以这个查询的成本是最小的。第一次1 TB扫描是免费的-这对于2 MB表上大约500000次扫描来说已经足够了。在那之后,每次额外的扫描是0.001美分。你知道吗

相关问题 更多 >