粗略的 Unicode -> 没有 CLDR 的语言代码
Rough Unicode -> Language Code without CLDR?
我正在编写一个字典应用程序。如果用户键入 Unicode 字符,我想检查该字符是哪种语言。
例如
字 - returns ['zh', 'ja', 'ko']
العربية - returns ['ar']
a - returns ['en', 'fr', 'de'] //and many more
й - returns ['ru', 'be', 'bg', 'uk']
我搜索并发现可以使用CLDR完成 https://stackoverflow.com/a/6445024/41948
或者 Google API Python - 我可以检测 unicode 字符串语言代码吗?
但就我而言
- 查找大型字符映射数据库似乎会花费大量存储空间和内存
- 调用 API 的速度太慢,此外还需要网络连接
- 不需要非常准确。 只有大约 80% 的正确率是可以接受 的
- 简单快捷是主要要求
- 只覆盖 UCS2 BMP 字符是可以的。
有什么提示吗?
我需要在Python和Javascript中使用它。谢谢!
将字形缩小到语言家族是否足够?如果是这样,您可以根据 BMP 的映射创建一组范围(语言 -> 代码范围),如 http://en.wikipedia.org/wiki/Plane_(Unicode)#Basic_Multilingual_Plane 或 Unicode 图表页面的脚本部分所示 - http://www.unicode.org/charts/
由于共享符号的数量,可靠地确定字形的父语言肯定更加复杂。如果您只需要 80% 的准确率,则可以调整某些语言的范围,以故意包含/省略某些字符,如果它简化了您的范围。
编辑:我重新阅读了您引用CLDR的问题以及有关代码>语言映射的第一个答案。我认为这绝对是不可能的,但如果计算成本有点高,反过来似乎是可行的。通过巧妙的数据结构,您可以识别语言家族,然后从那里向下钻取到实际语言范围,从而减少通过不相关的语言>范围对的遍历。
如果语言数量相对较少(或者您关心的数量相当少),则可以对每种语言使用 Bloom 过滤器。布隆过滤器允许您执行非常便宜的成员资格测试(可能会有误报),而无需将所有成员(在本例中为代码点)存储在内存中。然后,通过根据每种语言的预构造筛选器检查代码点来生成结果集。它是可调整的 - 如果收到太多误报,则可以使用更大大小的筛选器,但会牺牲内存。
有用于Python和Javascript的Bloom过滤器实现。(嘿 - 我见过做这个的人!http://www.jasondavies.com/bloomfilter/)
布隆滤镜:http://en.m.wikipedia.org/wiki/Bloom_filter
做更多的阅读,如果你只需要BMP(65,536个代码点),你可以为每种语言存储一个直接的位集。或用于语言 X 码位的 2D 位数组。
您想考虑多少种语言?
- 有没有任何方法可以将控制器从文件加载到ui路由器$stateProvider中
- D3在一个调用中绘制不同的SVG形状,没有可见性
- 我的jQuery插件参数没有正确启动,遇到了问题
- 视频HTML没有'无法在Internet Explorer 11上工作
- Firebase迁移-简单的Firebase.set没有'不再工作了——旧的还是新的
- 节点Js:How to catch a“;没有这样的文件或目录“;读取线模块出错
- document.open/document.write没有正确地清除chrome中的文档——这是chrome的错误吗
- angular.js没有'无法在PhoneGap中处理视图标记
- 有没有一种方法可以添加相同的项目val=“0”;4〃;到JavaScript中数组的每个对象
- 有没有一种方法可以防止img get请求使用css或js发生
- Javascript,有没有一种方法可以将数组写成没有逗号或空格的单个文本字符串
- JavaScript中的函数和对象之间没有区别吗?
- JSON.parse没有'不能使用Javascript
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- Chrome扩展没有't在重新加载之前考虑期权价值
- 我的AngularJS表达式没有'不起作用
- 有没有一个javascript图形绘制库可以进行气球树布局
- 为什么我的d3.jsselectAll+过滤器没有过滤
- MockJax没有在JavaScript应用程序中发送对我AJAX请求的响应
- 粗略的 Unicode -> 没有 CLDR 的语言代码