java - 将 Tika LanguageIdentifier 限制为仅特定语言

标签 java apache apache-tika

我试图将 Apache Tika LanguageIdentifier 限制为一系列语言。当我运行下面的代码时,它只检测到文本为“de”,因此是德语。我想这样做的原因是为了让 LanguageIdentifier 由于语言限制而表现得更好。清理标准配置文件后,我只将我想要的配置文件添加到 map 中,并使用此 map 初始化 LanguageIdentifier。

String[] languages = {"de", "en", "fr", "nl", "es"};
Map<String, LanguageProfile> languageMaps = new HashMap <String, LanguageProfile>();

LanguageIdentifier.clearProfiles();

        for (String language : languages) {

    LanguageProfile profile = new LanguageProfile();
    languageMaps.put(language, profile);

    }

    LanguageIdentifier.initProfiles(languageMaps);

String docText = "Hello";


LanguageIdentifier identifier = new LanguageIdentifier(docText);

System.out.println(identifier.getLanguage());

当我运行以下代码时

LanguageIdentifierLanguageIdentifier.getSupportedLanguages())

它从数组中返回语言,所以我真的不知道出了什么问题。

最佳答案

当您创建新的LanguageProfile时,您必须再次自行添加定义语言的所有ngram信息。通过此设置,您只需创建空容器,然后始终选择数组中的第一个,因为它是第一个,并且您没有任何其他信息。

参见API documentation of LanguageProfile

只需从以下位置获取 nedded 语言 ngram 文件 http://svn.apache.org/repos/asf/tika/trunk/tika-core/src/main/resources/org/apache/tika/language/

使用以下命令初始化它(假设 ngram 文件位于类路径根目录中):

String[] languages = { "de", "en" };

Map<String, LanguageProfile> languageMaps = new HashMap<String, LanguageProfile>();

LanguageIdentifier.clearProfiles();

for (String language : languages) {

    LanguageProfile profile = new LanguageProfile();

    InputStream stream;
    try {
        stream = new FileInputStream(new File("./" + language + ".ngp"));

        BufferedReader reader = new BufferedReader(new InputStreamReader(stream, UTF_8));

        String line = reader.readLine();

        while (line != null) {
            if (line.length() > 0 && !line.startsWith("#")) {
                int space = line.indexOf(' ');
                profile.add(line.substring(0, space), Long.parseLong(line.substring(space + 1)));
            }
            line = reader.readLine();
        }

    } catch (IOException e) {
        throw new RuntimeException(e);
    }

    languageMaps.put(language, profile);

}

LanguageIdentifier.initProfiles(languageMaps);

关于java - 将 Tika LanguageIdentifier 限制为仅特定语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34032488/

相关文章:

php - UTF-8贯穿始终

java - OneNote 对 Apache Tika 解析器的支持

java - 如何使用 Apache tika TypeDetector 检测文件是否为 mp3?

Java "ajp-9009-AsyncTimeout"java.lang.OutOfMemoryError : Java heap space Errors 错误

Java 使用 BufferedReader 比较文件

Java-错误 : Could not find or load main class

java - 使用 Popen 运行 Java 应用程序

java - JAXB 和类实例化

mysql - 如何更改mysql root密码?

php - Heroku PHP 和 Apache dyno 崩溃并出现错误 H10