Java 如何检测用户输入文本的语言?

Java 如何检测用户输入文本的语言?,java,nlp,language-detection,Java,Nlp,Language Detection,我正在处理一个应用程序,它接受不同语言的用户输入(目前固定了3种语言)。要求是用户可以输入文本,而不必通过UI中提供的复选框选择语言 是否有现有Java库来检测文本的语言 我想要这样的东西: text = "To be or not to be thats the question." // returns ISO 639 Alpha-2 code language = detect(text); print(language); 结果: EN 我不想知道如何自己创建语言检测器(我看到很

我正在处理一个应用程序,它接受不同语言的用户输入(目前固定了3种语言)。要求是用户可以输入文本,而不必通过UI中提供的复选框选择语言

是否有现有Java库来检测文本的语言

我想要这样的东西:

text = "To be or not to be thats the question."

// returns ISO 639 Alpha-2 code
language = detect(text);

print(language);
结果:

EN
我不想知道如何自己创建语言检测器(我看到很多博客都在尝试这样做)。该库应该提供一个简单的APi,也可以完全脱机工作。开源或商业关闭并不重要

我还发现了这样一些问题(还有一些问题):



谷歌提供了一个API,可以为您做到这一点。我昨天偶然发现了这个,没有保留链接,但是如果你,嗯,用谷歌搜索它,你应该设法找到它

这与他们的翻译API的描述很接近,它可以为您将文本翻译成您喜欢的任何语言。还有一个电话只是为了猜测输入语言

谷歌是世界上机械翻译的领导者之一;他们将他们的资料建立在非常大的文本库(大部分是互联网上的)和一种统计方法的基础上,而这种统计方法通常仅仅凭借巨大的样本空间就能“正确”地进行分析

编辑:以下是链接:

编辑2:如果你坚持“离线”:一个得票很高的答案是建议的。它是一个C++库,处理大约60种语言。< /P> < P>是一种替代,但它不是很健壮,语言基础有限。好消息是它是一个Apache许可证,如果它满足您的需求,您可以使用它。我在这里猜,但是你会在单跳和双跳之间释放空格键吗?版本0.2已经发布

在版本0.4中,它非常健壮。我已经在我自己的许多项目中使用了它,并且从未遇到过任何重大问题。此外,在速度方面,它可以与非常专业的语言检测器相媲美(例如,仅限少数语言)。

这里有两个选项

    • 这里是另一个选项:

      这是一个Java库

      还提供

      例如:

      List results=DetectLanguage.detect(“Hello world”);
      结果=结果。获取(0);
      System.out.println(“语言:+result.Language”);
      System.out.println(“可靠:+结果可靠”);
      System.out.println(“信心:+结果信心”);
      
      这将为53种语言提供99%以上的准确率

      另外,还有一个内容分析库,它提供的不仅仅是语言检测

      只是cybozu实验室现有解决方案中的一个工作代码:
      
      Just a working code from already available solution from cybozu labs:
      
      package com.et.generate;
      
      import java.util.ArrayList;
      import com.cybozu.labs.langdetect.Detector;
      import com.cybozu.labs.langdetect.DetectorFactory;
      import com.cybozu.labs.langdetect.LangDetectException;
      import com.cybozu.labs.langdetect.Language;
      
      public class LanguageCodeDetection {
      
          public void init(String profileDirectory) throws LangDetectException {
              DetectorFactory.loadProfile(profileDirectory);
          }
          public String detect(String text) throws LangDetectException {
              Detector detector = DetectorFactory.create();
              detector.append(text);
              return detector.detect();
          }
          public ArrayList<Language> detectLangs(String text) throws LangDetectException {
              Detector detector = DetectorFactory.create();
              detector.append(text);
              return detector.getProbabilities();
          }
          public static void main(String args[]) {
              try {
                  LanguageCodeDetection ld = new  LanguageCodeDetection();
      
                  String profileDirectory = "C:/profiles/";
                  ld.init(profileDirectory);
                  String text = "Кремль россий";
                  System.out.println(ld.detectLangs(text));
                  System.out.println(ld.detect(text));
              } catch (LangDetectException e) {
                  e.printStackTrace();
              }
          }
      
      }
      
      Output:
      [ru:0.9999983255911719]
      ru
      
      包com.et.generate; 导入java.util.ArrayList; 导入com.cybozu.labs.langdetect.Detector; 导入com.cybozu.labs.langdetect.detector工厂; 导入com.cybozu.labs.langdetect.LangDetectException; 导入com.cybozu.labs.langdetect.Language; 公共类语言代码检测{ public void init(String profileDirectory)引发LangDetectException{ DetectorFactory.loadProfile(profileDirectory); } 公共字符串检测(字符串文本)引发LangDetectException{ 检测器检测器=检测器工厂。创建(); 检测器。追加(文本); 返回检测器。detect(); } 公共ArrayList detectLangs(字符串文本)引发LangDetectException{ 检测器检测器=检测器工厂。创建(); 检测器。追加(文本); 返回检测器。getProbabilities(); } 公共静态void main(字符串参数[]){ 试一试{ LanguageCodeDetection ld=新的LanguageCodeDetection(); String profileDirectory=“C:/profiles/”; ld.init(profileDirectory); String text=“ББМцСц”; System.out.println(ld.detectLangs(text)); System.out.println(ld.detect(text)); }渔获物(lange){ e、 printStackTrace(); } } } 输出: [ru:0.9999983255911719] 茹
      个人资料可从以下网址下载:

      请阅读:@S.Lott:谢谢,我已经读了很多,只是在搜索脱机工作的库,不想自己创建任何东西。可靠地识别自然语言被认为是一个难题。任何适合您的代码空间和硬盘的解决方案都不太可能很好。此问题的可能重复也与以下因素密切相关:这?->@曼布拉:除非你手边有谷歌数据存储设施的备份副本;)@potatopeelings:我刚刚潜入谷歌,发现了同样的东西。我会更新我的答案。谢谢@potatopeelings:我必须承认我的母语不是英语,但当我提到“离线”时,我的意思是它应该在没有任何网络连接(=没有互联网)的情况下工作。我猜语言是python,所以Jython应该能够从Java运行它。现在有版本0.3,它甚至可以检测到保加利亚语。对不起,版本0.4可用。此方法需要internet连接,在应用程序上使用它之前必须考虑这一点。