prosource

Oracle에서 주어진 문자열의 언어(영어, 중국어...)를 결정하는 방법은 무엇입니까?

probook 2023. 10. 10. 20:39
반응형

Oracle에서 주어진 문자열의 언어(영어, 중국어...)를 결정하는 방법은 무엇입니까?

Oracle(다언어 환경)에서 주어진 스팅(표 열 값)의 언어(영어, 중국어...)를 결정하는 방법은 무엇입니까?

Java용 Language Detection과 같은 라이브러리를 사용하여 PL/SQL과 연결할 수 있어야 합니다.

SQL을 사용하여 베이즈 필터링을 수행하고 위키피디아에서 파생된 언어 프로파일을 사용하는 것이 더 효율적일 것입니다(여기에 깔끔하게 포장되어 있음).

이것들은 단지 조언일 뿐, 현상금에 대한 완전한 해결책이 아니라 현상금을 추구하는 사람들을 도와야 합니다.

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

"이 단어가 어떤 언어에 속하는지" 또는 "문자 인코딩"에 있는 언어를 의미합니까?

첫 번째 경우는 휴리스틱만 있는 것 같은데 Oracle Database에서 발송하는지 잘 모르겠습니다.Oracle Ultra Search에는 통계 언어 인식기가 있습니다.

두 번째 경우: 인코딩은 항상 데이터베이스의 시스템 인코딩입니다.(물론 클라이언트 프레임워크와 드라이버에 따라 달라짐) 검색 시 로컬 표현으로 변환되므로 실제로 사용해서는 안 됩니다.

가능한 해결책은 다음과 같습니다.

1) 사전을 좀 정비해 두다txt 파일을 원하는 언어로 입력합니다.

2) 문제의 입력 문자열을 구문 분석할 때 스캐너와 같은 것을 사용하여 각 단어를 읽고 가장 예상되는 사전에서 문자열이 해당 언어(특정 비율)에 속하지 않음을 주장할 수 있을 때까지 검색합니다.

3) 답을 찾을 때까지 다음으로 가능성이 높은 사전 등을 확인하거나 결정할 수 없습니다.

예를 들어, 영어 Dict.txt, spanishDict.txt, frenchDict.txt를 가지고, 처음 100개의 단어가 영어 Dict.txt에 있는지 먼저 확인하고, 적당한 숫자(예를 들어, 100개 중 70개)를 찾는다면, 영어라고 가정할 수 있고, 그렇지 않으면, 다음 파일을 확인합니다.또는 각 사전에서 읽고 일치하는 항목이 가장 많은 결과를 선택할 수도 있습니다.

또는 관사, 대명사, 공통 동사 등 일반적으로 사용되는 언어 단어를 먼저 검색할 수도 있습니다.어떤 해결책이든 답을 찾기 위해서는 몇 가지 검색과 비교를 수행해야 한다는 느낌이 듭니다.

언급URL : https://stackoverflow.com/questions/23529123/how-to-determine-the-languageenglish-chinese-of-a-given-string-in-oracle

반응형