2014-05-07 4 views
10

ओरेकल (बहु भाषा पर्यावरण) में किसी दिए गए स्टिंग (तालिका कॉलम मान) की भाषा (अंग्रेज़ी, चीनी ...) कैसे निर्धारित करें?ओरेकल में दी गई स्ट्रिंग की भाषा (अंग्रेजी, चीनी ...) कैसे निर्धारित करें?

+0

इन सवालों नहीं था मदद की http://stackoverflow.com/questions/3227524/how-to-detect-language-of-user-entered-text http://stackoverflow.com/questions/7443987/autodetect-language-of-a-text-in-java-android – lakshman

+0

बहुत अच्छे * सुझाव * हैं लेकिन बाउंटी अच्छा * कोड * के लिए था। यदि कोई भी पीएल/एसक्यूएल में एक साथ काम कर रहे उदाहरण को एक साथ रख सकता है तो मैं आपको 200 प्वाइंट बक्षीस दूंगा। –

उत्तर

0

क्या आपका मतलब यह है कि भाषा "यह शब्द किस भाषा से संबंधित है" या "वर्ण एन्कोडिंग" में है?

पहले मामले में मुझे लगता है कि केवल हेरिस्टिक हैं, मुझे यकीन नहीं है कि ओरेकल डेटाबेस किसी भी जहाज को शिप करता है या नहीं। ओरेकल अल्ट्रा सर्च में एक सांख्यिकीय भाषा पहचानकर्ता है।

दूसरे मामले में: एन्कोडिंग हमेशा डेटाबेस का सिस्टम एन्कोडिंग होता है (लेकिन आपको वास्तव में इसका उपयोग नहीं करना चाहिए, क्योंकि जब आप इसे पुनर्प्राप्त करते हैं तो यह आपके स्थानीय प्रतिनिधित्व में परिवर्तित हो जाता है (आपके ग्राहक ढांचे और ड्राइवर के आधार पर)।

+0

आपके उत्तर के लिए धन्यवाद। मेरा मतलब पहला मामला था ("यह शब्द किस भाषा से संबंधित है")। मैंने Google अनुवाद (https://translate.google.com/) की कोशिश की है और ऐसा लगता है कि यह भाषा को सही ढंग से पहचानने में सक्षम है। मैं सोच रहा हूं कि क्या हमने भाषा पहचान या चरित्र सेट के लिए ऑरैकल में एपिस में कोई भी बनाया है। – user3614051

3

यह Language Dectection for Java की तरह एक पुस्तकालय का उपयोग करें और अपने PL/SQL के साथ टाई करने के लिए संभव होना चाहिए।

यह शायद use SQL to do naive Bayesian filtering और उपयोग भाषा प्रोफाइल विकिपीडिया (they are neatly packed here) से जैसे व्युत्पन्न के लिए और अधिक कुशल हो जाएगा।

से सिर्फ पॉइंटर्स हैं, बकाया के लिए अनुरोध किए गए पूर्ण समाधान नहीं, बल्कि बाउंटी-साधकों की मदद करनी चाहिए।

0

सम्भावित समाधान हो सकता है:

1) भाषाओं में कुछ Dictionary.txt फ़ाइलों को बनाए रखने के आप

2) उम्मीद कर रहे हैं जब प्रश्न में इनपुट स्ट्रिंग पार्स करने, प्रत्येक को पढ़ने के लिए एक स्कैनर की तरह कुछ का उपयोग सबसे अधिक अपेक्षित शब्दकोश में शब्द और खोज करें, जब तक कि उचित संख्या में मिलान या असफलता आपको स्ट्रिंग पर जोर देने की अनुमति न दे, वह उस भाषा से नहीं हो (शायद एक निश्चित प्रतिशत)।

3) अगली सबसे अधिक संभावित शब्दकोश, आदि की जांच करें, जब तक कि आपको उत्तर न मिल जाए, या इसे निर्धारित नहीं किया जा सके।

उदाहरण के लिए, englishDict.txt, spanishDict.txt, और frenchDict.txt है, और शायद जांचें कि पहले 100 शब्द अंग्रेजी Dict.txt में मौजूद हैं या नहीं, और यदि आपको उचित संख्या मिलती है (कहें, 70 में से 70 100), आप उचित रूप से मान सकते हैं कि यह अंग्रेजी में है; अन्यथा, अगली फाइल की जांच करें। या, आप प्रत्येक शब्दकोश से भी पढ़ सकते हैं, और अधिकांश मैचों के साथ परिणाम का चयन कर सकते हैं।

वैकल्पिक रूप से, आप लेखों, सर्वनामों और सामान्य क्रियाओं जैसे सामान्य रूप से उपयोग किए जाने वाले भाषा शब्दों की खोज कर सकते हैं। मुझे एहसास है कि समाधान से कोई फर्क नहीं पड़ता, आपको उत्तर खोजने के लिए कुछ खोज और तुलना करने की आवश्यकता होगी।

0

Oracle Globalization Development Kit भाषा का पता लगा सकते हैं।

जीडीके ओरेकल के साथ शामिल है लेकिन यह डिफ़ॉल्ट रूप से डेटाबेस में स्थापित नहीं है। डेटाबेस में .jar फ़ाइलें लोड करने के लिए ओरेकल घर में jlib निर्देशिका खोजने के लिए और इस ऑपरेटिंग सिस्टम कमांड चलाएँ:

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 

कुछ अतिरिक्त जावा विशेषाधिकार की आवश्यकता है, अपने उपयोगकर्ता डीबीए है, भले ही। इस कमांड को चलाएं और फिर पुनः कनेक्ट करें:

exec dbms_java.grant_permission('YOUR_USER_NAME', 'SYS:java.lang.RuntimePermission', 'getClassLoader', ''); 

पहचान करने के लिए जावा क्लास बनाएं।नीचे एक बहुत ही सरल उदाहरण है कि एक स्ट्रिंग के लिए सबसे अच्छा अनुमान देता है:

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

लपेटें एक PL/SQL समारोह में जावा वर्ग:

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; 
:

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'; 
/

एक नमूना तालिका बनाएं

अब फ़ंक्शन सरल 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 
संबंधित मुद्दे