如何确定Oracle中给定字符串的语言(英文,中文...)?

时间:2014-05-07 21:49:52

标签: java oracle plsql nlp

如何在Oracle(多语言环境)中确定给定字符串(表列值)的语言(英语,中文...)?

4 个答案:

答案 0 :(得分:3)

应该可以使用像Language Dectection for Java这样的库,并将其与PL / SQL联系起来。

use SQL to do naive Bayesian filtering可能会更高效,并使用例如派生的语言配置文件来自维基百科(they are neatly packed here)。

这些只是指针,而不是赏金所要求的完整解决方案,但应该有助于赏金者。

答案 1 :(得分:0)

你的意思是语言和#34;这个词属于哪种语言"或者在"字符编码"?

对于第一种情况,我认为只有启发式,我不确定Oracle数据库是否可以发送。 Oracle Ultra Search具有统计语言识别器。

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

答案 2 :(得分:0)

可能的解决方案可能是:

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

2)在解析有问题的输入字符串时,使用类似扫描程序的东西来读取每个单词并在最期望的字典中搜索它,直到合理数量的匹配或失败允许你断言字符串不是来自那个语言(可能是一定比例)。

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

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

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

答案 3 :(得分:0)

Oracle Globalization Development Kit可以检测语言。

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