我有一组包含如下连接词的字符串:
longstring (two English words)
googlecloud (a name and an English word)
当我在Google中输入这些字词时,它会识别“你的意思是什么?” (“长串”,“谷歌云”)。我的应用程序中需要类似的功能。
我查看了Python和ElasticSearch提供的选项。我发现的所有标记化示例都基于空格,大写字母,特殊字符等。
如果字符串是英文的(但它们可能包含名称),我有哪些选择?它不一定是特定的技术。
我可以使用Google BigQuery完成此操作吗?
答案 0 :(得分:1)
您还可以推出自己的实施吗?我正在考虑这样的算法:
trie
)如果字符串可以拆分,应该是ok-ish,但是如果它的乱码会尝试所有可能性。当然,这取决于你的词典有多大。但这只是一个快速思考,也许它有所帮助。
答案 1 :(得分:1)
如果您确实选择使用BigQuery解决此问题,那么以下是候选解决方案:
将所有可能的英语单词列表加载到名为words
的表中。例如,https://github.com/dwyl/english-words包含约350,000个单词的列表。互联网上也有其他数据集(即WordNet)。
使用标准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桌面上进行大约500,000次扫描。之后,每次额外扫描都是0.001美分。