Определить язык строки из Google API C #

1

Я пытаюсь определить, на каком языке написано txt player.LastChat, и у меня возникают некоторые трудности.

Вот код, который у меня есть:

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

Итак, что я пытаюсь достичь, это вернуть true, если это какой-либо другой язык, чем "en" (английский), но он возвращает true независимо от того, что.

Ответ от google заключается в следующем:

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

Любая помощь очень ценится, и я понятия не имею, как закодировать код, этот код заимствован из другого скрипта.

С уважением.

  • 0
    Вы тестируете это со случайными строками или с реальными предложениями иностранных языков? В ответах Google в основном говорится: «На самом деле я не имею ни малейшего представления о том, каким может быть этот язык, поэтому я по умолчанию выберу английский» (потому что английский в любом случае несовместим, я думаю :-p)
  • 1
    jsonString.Contains ("en") не является хорошим, он всегда будет возвращать true, потому что он также найдет "en" в "секретности", лучше проанализировать / десериализовать его и получить значение языка
Показать ещё 2 комментария
Теги:

1 ответ

3
Лучший ответ

Чтобы сделать работу метода, как описано, вы должны изменить:

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

чтобы:

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

также эта строка

jsonresult = json.Contains("en");

проверяет наличие "en" в тексте json (и находится в "confidence" в вашем json). То, что вы должны сделать, это разобрать Json с помощью json.net (или другой библиотеки) или просто сделать это (но это уродливый взлом):

jsonresult = json.Contains("\"language\": \"en\",");
  • 0
    Спасибо! Это работает! Теперь я могу добавить больше языков, и он возвращает истину, только если они не определены. :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню