2014-05-07 7 views
10

Wie die Sprache (Englisch, Chinesisch ...) eines bestimmten Stachel (Tabellenspaltenwert) in Oracle (mehrsprachige Umgebung) zu bestimmen?Wie kann man die Sprache (Englisch, Chinesisch ...) einer gegebenen Zeichenkette in Oracle bestimmen?

+0

nicht diese Fragen haben geholfen http://stackoverflow.com/questions/3227524/how-to-detect-language-of-user-entered-text http://stackoverflow.com/questions/7443987/autodetect-sprache-von-einem-text-in-java-android – lakshman

+0

Es gibt viele gute * Vorschläge * aber das Kopfgeld war für guten * Code *. Wenn jemand jemals ein funktionierendes Beispiel in PL/SQL zusammenstellen kann, gebe ich dir 200 Punkte Kopfgeld. –

Antwort

0

Meinst du die Sprache als "welche Sprache gehört dieses Wort" oder wie in "Zeichencodierung"?

Für den ersten Fall denke ich, es gibt nur Heuristiken, ich bin mir nicht sicher, ob Oracle Database Schiffe. Oracle Ultra Search verfügt über eine statistische Spracherkennung. Im zweiten Fall: Die Kodierung ist immer die Systemkodierung der Datenbank (aber Sie sollten sie eigentlich nicht verwenden, da sie beim Aufruf in Ihre lokale Darstellung konvertiert wird (abhängig natürlich von Ihrem Client-Framework und Treiber)).

+0

Vielen Dank für Ihre Antwort. Ich meinte ersten Fall ("welcher Sprache dieses Wort gehört"). Ich habe Google Translate (https://translate.google.com/) ausprobiert und scheint die Sprache korrekt identifizieren zu können. Ich frage mich, ob wir irgendwelche eingebauten Apis in Orakel für Spracherkennung oder Zeichensatz haben. – user3614051

0

könnte eine mögliche Lösung sein:

1) in der Sprache einige dictionary.txt Dateien halten Sie erwarten

2), wenn die Eingabezeichenfolge in Frage Parsen, so etwas wie ein Scanner verwendet jeden lesen Wort und suchen Sie es im am meisten erwarteten Wörterbuch, bis eine angemessene Anzahl von Übereinstimmungen oder Fehlschlägen es ermöglicht, dass die Zeichenfolge nicht aus dieser Sprache stammt (möglicherweise ein bestimmter Prozentsatz).

3) Überprüfen Sie das nächstwahrscheinliche Wörterbuch usw., bis Sie die Antwort gefunden haben oder nicht ermitteln können.

Haben Sie zum Beispiel englishDict.txt, spanishDict.txt und frenchDict.txt, und überprüfen Sie vielleicht, ob die ersten 100 Wörter in der englischenDict.txt zuerst existieren, und wenn Sie eine vernünftige Zahl finden (sagen wir 70 aus 100), kann man vernünftigerweise davon ausgehen, dass es auf Englisch ist; Überprüfen Sie andernfalls die nächste Datei. Oder Sie können auch von jedem Wörterbuch lesen und das Ergebnis mit den meisten Übereinstimmungen auswählen.

Alternativ könnten Sie zuerst nach häufig verwendeten Sprachwörtern suchen, wie Artikel, Pronomen und allgemeine Verben. Ich habe das Gefühl, dass Sie unabhängig von der Lösung eine Reihe von Suchen und Vergleichen durchführen müssen, um die Antwort zu finden.

0

Oracle Globalization Development Kit kann Sprachen erkennen.

Das GDK ist in Oracle enthalten, wird jedoch nicht standardmäßig in der Datenbank installiert. die .jar-Dateien in die Datenbank finden Sie das jlib Verzeichnis in der Oracle nach Hause zu laden und dieses Betriebssystem Befehl ausführen:

loadjava -u [email protected] 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 

Einige zusätzliche Java-Privilegien benötigt werden, auch wenn Ihre Benutzer DBA hat. Führen Sie diesen Befehl aus und stellen Sie die Verbindung wieder her:

Erstellen Sie eine Java-Klasse für die Erkennung.Unten ist ein sehr einfaches Beispiel, das die beste Vermutung für einen String zurückgibt:

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(); 
    } 
} 
/

Wickeln Sie die Java-Klasse in einer Funktion 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'; 
/

eine Beispieltabelle erstellen:

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; 

Jetzt ist die Funktion in einfachen SELECT Anweisungen verfügbar. In diesem trivialen Beispiel funktioniert die Spracherkennung einwandfrei.

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 
Verwandte Themen