我将详细说明您将如何完成这些工作。
大写
这与命名实体识别非常接近,并且是“序列标记问题”的一个示例。专有名词最初应大写,作为首字母缩略词的组织名称应全部大写,然后还有其他示例不属于这些类别。在我看来,它因此比 NER 更难,因此基于字典的简单方法可能不是理想的解决方案。
如果您要使用隐马尔可夫模型,这相当于让 HMM 的“隐藏”状态为 [lowerCase, initCaps, allCaps] 并对您认为正确的一些数据进行训练(例如 Wikipedia,但还有许多其他来源也)。然后,您可以推断出您不确定是否正确大写的单词的隐藏状态。那里有很多 HMM 库,我相信您可以找到一个满足您需求的库。我会说尝试 HMM 是一个不错的初始选择。
非 ASCII 字符
如您所料,这是一个更棘手的问题。如果您尝试在单词级别使用 HMM 执行此操作,您将拥有大量隐藏状态,每个重音单词都有一个隐藏状态,这可能无法训练。这个问题在角色层面更容易处理,但如果只考虑前一个角色,就会失去大量的上下文。如果您开始使用 n-gram 而不是字符,您的缩放问题就会再次出现。简而言之,我不认为这个问题和上一个问题一样,因为标签数量太大,不能认为是序列标签问题(我的意思是你可以,只是不实用)。
我还没有听说过这方面的研究,那么我又不是专家。我最好的猜测是对您感兴趣的语言使用通用语言模型。您可以使用它来为您提供该语言中句子的概率。然后,您可以尝试替换可能带有重音的字符以给出这些句子的概率并取最可能的值,或者对差异使用一些阈值,或类似的东西。您可以在某种语言的大型语料库上相当轻松地训练 n-gram 语言模型。
我不知道这是否真的有效,无论是在准确性还是效率方面。我没有这个特殊问题的直接经验。
音译
不知道,说实话。我不知道你会在哪里找到数据来制作你自己的系统。简单搜索后,我找到了Google Transliteration服务(带有 API)。也许它可以满足您的需求。我什至没有足够的语言与其他脚本的经验来真正知道它在做什么。