从Google API C#中检测字符串语言

时间:2015-01-16 14:50:47

标签: c#

我正在尝试检测播放器的写入txt是什么语言。最后一个问题,我遇到了一些困难。

这是我的代码:

String[] words = player.LastChat.Trim().Split(new Char[]{' ','\t',',','.',':','!','?',';','(',')',']','[','"'});
StringBuilder edited = new StringBuilder();
// Remove exception list words from line
foreach (String w in words) {
    if (plugin.isInList(w, "good_words")) {
        continue;
    }
    edited.Append(w);
    edited.Append(" ");
}

// URL Encode edited string
String UnreservedChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.~";
StringBuilder Result = new StringBuilder();
String Input = edited.ToString();

for (int x = 0; x < Input.Length; ++x)
{
    if (UnreservedChars.IndexOf(Input[x]) != -1)
        Result.Append(Input[x]);
    else
        Result.Append("%").Append(String.Format("{0:X2}", (int)Input[x]));
}
String key = "API KEY";
// Test for badness
bool jsonresult = false;

try {
    WebClient client = new WebClient();
    String json = client.DownloadString("https://www.googleapis.com/language/translate/v2/detect?key=" + key + "&q=" + Result.ToString());
    jsonresult = json.Contains("en");
} catch (Exception e) {
    plugin.ConsoleWrite("Language check failed! Error: " + e);
}
if (!jsonresult) {
    return true;
}
plugin.ConsoleWrite("Language: " + jsonresult);
return jsonresult; // for Actions

所以,我想要实现的是,如果它是除了&#34; en&#34;之外的任何其他语言,则返回true。 (英语),但无论如何它都会回归。

Google的回复是:

{
"data": {
"detections": [
[
{
"language": "en",
"isReliable": false,
"confidence": 0.03396887
}
]
]
}
}

非常感谢任何帮助,我不知道如何编码,这段代码是从另一个脚本借来的。

问候。

1 个答案:

答案 0 :(得分:4)

要使方法按所描述的方式工作,您应该更改:

if (!jsonresult) {
    return true;
}
plugin.ConsoleWrite("Language: " + jsonresult);
return jsonresult;

到:

plugin.ConsoleWrite("Language: " + jsonresult);
return !jsonresult;

也是这一行

jsonresult = json.Contains("en");

正在检查json文本中是否出现"en"(并且在json中的"confidence"中找到)。你应该做的是使用json.net(或其他lib)解析Json,或者只是这样做(但是这是一个丑陋的黑客攻击):

jsonresult = json.Contains("\"language\": \"en\",");