Java 如何确定Oracle中给定字符串的语言(英语、汉语…)?

Java 如何确定Oracle中给定字符串的语言(英语、汉语…)?,java,oracle,plsql,nlp,Java,Oracle,Plsql,Nlp,如何在Oracle(多语言环境)中确定给定sting(表列值)的语言(英文、中文…)。您指的是“该单词所属的语言”还是“字符编码”中的语言 对于第一种情况,我认为只有试探法,我不确定Oracle数据库是否有。Oracle Ultra Search具有统计语言识别器 在第二种情况下:编码始终是数据库的系统编码(但实际上不应该使用它,因为在检索它时它会转换为本地表示形式(当然取决于您的客户机框架和驱动程序)。应该可以使用类库并将其与PL/SQL绑定 使用从维基百科()派生的语言配置文件可能会更有效

如何在Oracle(多语言环境)中确定给定sting(表列值)的语言(英文、中文…)。

您指的是“该单词所属的语言”还是“字符编码”中的语言

对于第一种情况,我认为只有试探法,我不确定Oracle数据库是否有。Oracle Ultra Search具有统计语言识别器


在第二种情况下:编码始终是数据库的系统编码(但实际上不应该使用它,因为在检索它时它会转换为本地表示形式(当然取决于您的客户机框架和驱动程序)。

应该可以使用类库并将其与PL/SQL绑定

使用从维基百科()派生的语言配置文件可能会更有效


这些只是指点,不是赏金要求的完整解决方案,但应该对赏金寻求者有所帮助。

可能的解决方案是:

1) 用您期望的语言维护一些dictionary.txt文件

2) 当解析有问题的输入字符串时,使用类似扫描仪的工具读取每个单词并在最期望的字典中搜索,直到有合理数量的匹配或失败允许您断言字符串不是来自该语言(可能是某个百分比)

3) 检查下一个最可能的字典等,直到你找到答案,或无法确定它

例如,使用englishDict.txt、spanishDict.txt和frenchDict.txt,并可能首先检查englishDict.txt中是否存在前100个单词,如果您找到一个合理的数字(例如,100个单词中有70个),您可以合理地假设它是英语单词;否则,请检查下一个文件。或者,您也可以从每个字典中读取,并选择匹配最多的结果

或者,您可以先搜索常用语言词,例如冠词、代词和常用动词。我有一种感觉,无论解决方案如何,您都必须执行一些搜索和比较才能找到答案。

可以检测语言

GDK包含在Oracle中,但默认情况下不安装在数据库中。要将.jar文件加载到数据库中,请在Oracle中找到jlib目录 主页并运行此操作系统命令:

loadjava -u USER_NAME@SID orai18n.jar orai18n-collation.jar orai18n-lcsd.jar orai18n-mapping.jar orai18n-net.jar orai18n-servlet.jar orai18n-tools.jar orai18n-translation.jar orai18n-utility.jar
即使您的用户有DBA,也需要一些额外的Java特权。运行此命令,然后重新连接:

exec dbms_java.grant_permission( 'YOUR_USER_NAME', 'SYS:java.lang.RuntimePermission', 'getClassLoader', '' );
创建一个Java类来执行检测。下面是一个非常简单的示例,返回字符串的最佳猜测:

create or replace and compile java source named "Language_Detector"
as
import oracle.i18n.lcsd.*;
public class Language_Detector
{
    public static String detect(String some_string)
    {
        LCSDetector detector = new LCSDetector();
        detector.detect(some_string);
        LCSDResultSet detector_results = detector.getResult();
        return detector_results.getORALanguage();
    }
}
/
将Java类包装在PL/SQL函数中:

create or replace function detect_language(some_string varchar2)
return varchar2
as language java
name 'Language_Detector.detect(java.lang.String) return java.lang.String';
/
创建示例表:

create table unknown_language(id number, text varchar2(4000));

insert into unknown_language
select 1, 'The quick brown fox jumps over the lazy dog' from dual union all
select 2, 'El zorro marrón rápido salta sobre el perro perezoso' from dual union all
select 3, '敏捷的棕色狐狸跳过懒狗' from dual union all
select 4, 'Der schnelle braune Fuchs springt über den faulen Hund' from dual union all
select 5, 'Быстрая коричневая лиса прыгает через ленивую собаку' from dual;
现在该函数在简单的
SELECT
语句中可用。在这个简单的例子中,语言检测可以完美地工作

select id, detect_language(text) language
from unknown_language
order by id;

ID  LANGUAGE
--  --------
1   ENGLISH
2   SPANISH
3   SIMPLIFIED CHINESE
4   GERMAN
5   RUSSIAN

谢谢你的回复。我指的是第一种情况(“这个词属于什么语言”)。我尝试过googletranslate(),它似乎能够正确识别语言。我想知道我们在oracle中是否有用于语言检测或字符集的内置API。这些问题是否有帮助?有很多好的建议,但奖励是为了好的代码。如果有人能用PL/SQL编写一个工作示例,我会给你200分的奖励。