一句话总结:建议针对主要印欧语言(底部列出的语言列表)构建最优(查找速度/紧凑性)数据结构,以表示多语言词典。
假设您想构建一些数据结构来实现一个多语言词典,例如互联网上排名前N(N〜40)的欧洲语言,选择语言按照网页数量(问题底部给出了语言的粗略列表)。目标是存储每种语言的工作词汇(即英语的25,000个单词等),不包括专有名词。不确定是否存储复数形式、动词变位、前缀等,或者添加语言特定的规则,说明这些是如何从名词单数或动词词干形成的。此外,您可以选择如何编码和处理重音、双元音和语言特定的特殊字符,例如可能在可能的情况下将其转写(例如罗马化德语ß为'ss',然后添加一个规则进行转换)。显然,如果您选择使用40-100个字符和Trie,则会有太多的分支,并且其中大部分为空。
任务定义:无论使用哪种数据结构,您都必须执行以下两个操作:
- 查找中的主要操作是快速获取一个指示符“是的,在语言A、B和F中,这是一个有效的单词,但不是在C、D或E中”。因此,如果N=40种语言,则您的结构可以快速返回40个布尔值。
- 辅助操作是为每种语言返回该单词(及其所有变形)的某些指针/对象(如果无效,则为null)。该指针/对象可以是用户定义的,例如词性和词典定义/同义词列表/翻译到其他语言的列表等。它可以是特定于语言的或与语言无关的,例如共享定义的披萨)。
效率的主要度量标准是a)紧凑性(跨所有N种语言)和b)查找速度之间的权衡。插入时间并不重要。紧凑性限制排除了浪费内存的方法,例如“为每个单词保留单独的哈希表”或“为每种语言保留单独的哈希表,并在该语言中保留每个单词”。
所以:
- 可能的数据结构有哪些,它们在查找速度/紧凑性曲线上如何排名?
- 您是否拥有适用于所有N种语言的统一结构,或将日耳曼语言分成一个子结构,斯拉夫语言则分成另一个子结构等?还是仅有N个单独的结构(这将使您能够进行哈夫曼编码)?
- 您使用哪种表示字符、重音和特定于语言的特殊字符的表示形式?
- 最好提供算法或代码链接,特别是Python或C。 -
我查看了SO(stackoverflow.com),虽然有相关的问题,但没有这个确切的问题。我不需要SQL数据库。可以参考一篇2000年的论文:"Estimation of English and non-English Language Use on the WWW" - Grefenstette & Nioche。还有一个 多语言字典列表。 资源:两个在线多语言字典分别是Interglot(英/德/荷/法/西/瑞)和LookWayUp(英<->法/德/西/荷/葡)。
需要包含的语言:
为了简单起见,可能主要包括印欧语系:英语、法语、西班牙语、德语、意大利语、瑞典语+阿尔巴尼亚语、捷克语、丹麦语、荷兰语、爱沙尼亚语、芬兰语、匈牙利语、冰岛语、拉脱维亚语、立陶宛语、挪威语、波兰语、葡萄牙语、罗马尼亚语、俄语、塞尔维亚-克罗地亚语、斯洛伐克语、斯洛文尼亚语+布列塔尼语、加泰罗尼亚语、科西嘉语、世界语、盖尔语、威尔士语
可能包括俄语、斯拉夫语、土耳其语,排除阿拉伯语、希伯来语、伊朗语、印度语等。也许还可以包括马来语族。请告诉我可行性如何。