我目前正在学习Go,并且正在取得很大的进步。我这样做的一种方法是将过去的项目和原型(prototype)从以前的语言移植到新的语言。

现在,我正忙着使用前一段时间在Python中原型(prototype)化的“语言检测器”。在此模块中,我生成一个ngram频率表,然后在其中计算给定文本和已知语料库之间的差异。

这样可以通过返回给定ngram表的两个向量表示的余弦值来有效地确定哪个语料库是最匹配的。耶。数学。

我有一个用Go语言编写的原型(prototype),可以完美地与普通的ascii字符配合使用,但是我非常希望它可以与unicode多字节支持一起使用。这就是我要去的地方。

这是我正在处理的快速示例:http://play.golang.org/p/2bnAjZX3r0

我只发布了表生成逻辑,因为一切都已经很好了。

如您所见,通过运行该代码段,第一个文本可以很好地工作并建立一个准确的表。第二个文本是德语,其中有一些双字节字符。由于我构建ngram序列的方式,并且由于这些特定的 rune 由两个字节组成,因此出现了2个ngram,其中第一个字节被切除。

有人可以发布更有效的解决方案,或者至少指导我进行修复吗?我几乎可以肯定我正在解决这个问题。

我计划开放源代码打包此软件包,并使用Martini将其实现为服务,从而为人们提供可用于简单语言计算的简单API。

一如既往,谢谢!

最佳答案

如果我理解正确,则您希望chars函数中的Parse保留字符串中的最后n字符。由于您对Unicode字符而不是UTF-8表示形式感兴趣,因此您可能会发现将其作为[]rune slice 进行管理会更容易,并且只有在准备好将ngram添加到表时才转换回字符串。这样,您无需在逻辑中使用特殊情况下的非ASCII字符。

这是对执行上述操作的示例程序的简单修改:http://play.golang.org/p/QMYoSlaGSv

关于unicode - 建立一个ngram频率表并处理多字节 rune ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20778906/

10-14 19:10
查看更多