2009-05-02 15 views
7

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

मेरे समस्या साइट अधिकतर अंग्रेज़ी में हो जाएगा है, इसलिए यह धाराप्रवाह जापानी वर्ण मिश्रण करने, आम तौर पर hirigana और काटाकना की जरूरत है, लेकिन बाद में कांजी। मैं इसे पूरा करने के करीब आ रहा हूं; मैंने पाया है कि पृष्ठों और स्रोत फ़ाइलों को यूनिकोड और utf-8 सामग्री प्रकार होने की आवश्यकता है।

हालांकि, मेरी समस्या वास्तविक कोडिंग में आती है। मुझे जो चीज चाहिए वह काना के पाठ के तारों में हेरफेर करना है। एक उदाहरण है:

け す मुझे उस क्रिया को लेने और इसे टी-फॉर्म け し て में बदलने की आवश्यकता है। मैं इसे जावास्क्रिप्ट में करना पसंद करूंगा क्योंकि यह अधिक कुशलतापूर्वक करने के लिए सड़क की मदद करेगा, लेकिन अगर मुझे सिर्फ डीबी कॉल करना होगा और डीबी में सब कुछ पकड़ना होगा।

मेरा प्रश्न न केवल कैसे जावास्क्रिप्ट में यह करने के लिए है, लेकिन कुछ सुझाव और अन्य भाषाओं में चीजों के इन प्रकार के कर के लिए रणनीति भी, क्या कर रहे हैं। मैं भाषा सीखने वाले ऐप्स करने में और अधिक पाने की उम्मीद कर रहा हूं, लेकिन जब इसकी बात आती है तो मैं खो जाता हूं।

+0

आप उत्पन्न के कुछ फार्म पर देख रहे हैं? मेरी अज्ञानता को क्षमा करें, लेकिन नियमित वर्णमाला आधारित भाषा के लिए आप जो करना चाहते हैं उससे यह कठिन (एक भौगोलिक भाषा के लिए) दिखता है। – dirkgently

+0

उदाहरण में कोई समस्या नहीं है मूल शब्द मूल रूप से け す है लेकिन मैं す से し में बदल रहा हूं और adding जोड़ रहा हूं। एक और उदाहरण の む の ん で प्राप्त करने के लिए む से ん で बदल रहा है। एक आसान उदाहरण हो सकता है।た べ る जो आप को छोड़ देंगे और た べ て प्राप्त करने के लिए add जोड़ें। उम्मीद है कि यह अधिक समझ में आता है। – percent20

+0

आपके उदाहरण (अजीब तरह से!) मुझे एक धारणा दें (जो मुझे यकीन है कि गलत है) जो आप चाहते हैं वह कुछ स्ट्रिंग प्रतिस्थापन है। यहां तक ​​कि (यूनिकोड) regex काम करेगा। – dirkgently

उत्तर

4

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

आप जो करना चाहते हैं वह है मूलभूत स्ट्रिंग मैनिपुशन - लापता शब्द विभाजक के अलावा, बैरी नोट्स के अलावा, हालांकि यह तकनीकी समस्या नहीं है।

असल में, एक आधुनिक यूनिकोड-जागरूक प्रोग्रामिंग भाषा (जो जावास्क्रिप्ट संस्करण 1.3 के बाद से है, मुझे विश्वास है) के लिए जापानी काना या कांजी और लैटिन पत्र के बीच कोई वास्तविक अंतर नहीं है - वे सभी सिर्फ पात्र हैं। और एक स्ट्रिंग बस, अच्छी तरह से, वर्णों की एक स्ट्रिंग है।

जहां मुश्किल हो जाती है, तब आपको स्ट्रिंग्स और बाइट्स के बीच कनवर्ट करना होता है, क्योंकि तब आपको ध्यान देना होगा कि आप किस एन्कोडिंग का उपयोग कर रहे हैं।दुर्भाग्यवश, कई प्रोग्रामर, विशेष रूप से मूल अंग्रेजी बोलने वाले इस समस्या पर चमकते हैं क्योंकि एएससीआईआई लैटिन अक्षरों के लिए वास्तविक तथ्य एन्कोडिंग है और अन्य एन्कोडिंग आमतौर पर संगत होने का प्रयास करते हैं। यदि लैटिन अक्षरों की आपको आवश्यकता है, तो आप चरित्र एन्कोडिंग के बारे में अनजान रूप से अज्ञानी हो सकते हैं, मानते हैं कि बाइट्स और वर्ण मूल रूप से एक ही चीज़ हैं - और उन प्रोग्रामों को लिखें जो ASCII नहीं है।

तो यूनिकोड-जागरूक प्रोग्रामिंग का "गुप्त" यह है: पहचानना सीखें कि कहां और कहां बाइट्स में और कहां परिवर्तित हो जाते हैं, और सुनिश्चित करें कि उन सभी स्थानों पर सही एन्कोडिंग का उपयोग किया जाता है, यानी जिसका उपयोग रिवर्स रूपांतरण के लिए किया जाएगा और वह जो आपके द्वारा उपयोग किए जा रहे सभी पात्रों को एन्कोड कर सकता है। यूटीएफ -8 धीरे-धीरे डी-फैक्टो मानक बन रहा है और जहां भी आपके पास कोई विकल्प हो, आमतौर पर इसका इस्तेमाल किया जाना चाहिए।

विशिष्ट उदाहरण (गैर संपूर्ण):

  • जब (संपादक/आईडीई में एन्कोडिंग कॉन्फ़िगर) गैर- ASCII स्ट्रिंग शाब्दिक साथ स्रोत कोड लिखने
  • जब संकलन या इस तरह के स्रोत कोड की व्याख्या (संकलक/दुभाषिया एन्कोडिंग पता करने के लिए)
  • जब पढ़ने/एक फाइल करने के लिए तार लेखन (एन्कोडिंग कहीं एपीआई में निर्दिष्ट किया जाना चाहिए, या फ़ाइल के मेटाडेटा में) की जरूरत है
  • जब एक डेटाबेस के लिए तार लेखन (एन्कोडिंग में निर्दिष्ट किया जाना चाहिए डीबी ओ की विन्यास आर तालिका)
  • वेबसर्वर के माध्यम से HTML पृष्ठों को वितरित करते समय (एन्कोडिंग HTML शीर्षलेखों या पृष्ठों के मेटा हेडर में निर्दिष्ट होना चाहिए; फॉर्म और भी मुश्किल हो सकते हैं)
+0

वास्तव में इसे पढ़ने और किसी मित्र से बात करने के बाद मैंने मूल स्ट्रिंग मैनिपुलेशन फिर से करने की कोशिश की "सबकुछ एक स्ट्रिंग है" पर आधारित है और यह काम करता है। मुझे नहीं पता कि मैं क्या कर रहा था जिसने पहले प्रयास को मार डाला, लेकिन मुझे खुशी है कि यह आसान था और पहली बार काम नहीं कर रहा था। प्रतिक्रिया के लिए धन्यवाद। – percent20

0

अगर मैं सही ढंग से याद है, प्रतिस्थापन आप क्या करना चाहते पिछले प्रतीक या दो शब्द में द्वारा निर्धारित किया जाता है (और मैं एक बहुत कुछ साल मैं जापानी तो मैं गलत हो सकता है ले लिया बंद slacked)। अपना पहला उदाहरण लेते हुए, 'す' में समाप्त होने वाली किसी भी क्रिया में हमेशा इस तरह से संगत होने पर 'し て' होगा। इसी प्रकार む -> ん で के लिए। क्या आप शायद अंतिम चरित्र (ओं) -> संयुग्मित रूप का मानचित्रण स्थापित कर सकते हैं। आपको अपवादों के लिए खाता लेना पड़ सकता है, जैसे कि xx っ て से जुड़ा हुआ कुछ भी।

भाषाओं के बीच पोर्टेबिलिटी के लिए, आपको तर्क के आधार पर तर्क को अलग-अलग लागू करना होगा। यह समाधान स्पैनिश के लिए भी लागू करने के लिए काफी सरल होगा, क्योंकि संयोग इस बात पर निर्भर करता है कि क्रिया -ar, -er, या -ir (कुछ क्रियाओं के साथ आपके तर्क में अपवादों की आवश्यकता होती है) पर निर्भर करता है। दुर्भाग्य से, यह मेरे बहुभाषी कौशल की सीमा है, इसलिए मुझे नहीं पता कि यह उन दोनों से परे कितना अच्छा होगा।

+0

असल में मैंने मैपिंग करने के बारे में सोचा है और इसका लाभ देख सकता है यह, लेकिन वे परिवर्तन उड़ाने पर और अधिक लाभ का लाभ भी देखते हैं। मुझे यकीन है कि मैं किस दृष्टिकोण के बारे में अनिश्चित हूं और यहां तक ​​कि जापानी के साथ सभी को कैसे निपटाना है। बड़ी बात यह है कि बाद में जब मैं छोटे रूपों और ताई रूपों पर जाता हूं, जहां मैं देखता हूं कि वे मदद करते हैं। – percent20

1

आपका प्रश्न पूरी तरह से मुझे अस्पष्ट नहीं है।

हालांकि, मुझे जापानी भाषा के साथ काम करने का कुछ अनुभव था, इसलिए मैं अपना 2 सेंट दे दूंगा।

के बाद से जापानी ग्रंथों शब्द जुदाई (जैसे अंतरिक्ष चरित्र) की सुविधा नहीं है, सबसे महत्वपूर्ण उपकरण हम प्राप्त करने के लिए किया था एक शब्दकोश आधारित शब्द पहचानकर्ता है।

एक बार जब आप पाठ विभाजित हो जाते हैं, तो इसे "सामान्य" टूल के साथ कुशल बनाना आसान होता है।

वहाँ केवल 2 उपकरण जो ऊपर किया है (यानी संज्ञा, क्रिया, आदि) थे, और एक उप-उत्पाद के रूप में वे भी एक टैगर के रूप में काम किया।

संपादित करें: जब डब्ल्यू languagers काम कर हमेशा यूनिकोड का उपयोग करें।

+0

क्षमा करें, मेरा प्रश्न एक में दो चीजें हैं। मैं 2 अलग-अलग विषयों को शुरू करने के लिए परेशान था इसलिए मैंने "जापानी भाषा के साथ काम करने के लिए कुछ सुझाव क्या हैं" और "मैं xyz कैसे पूरा कर सकता हूं"। क्या आपके अनुभव के साथ आप कोई और सुझाव दे सकते हैं जो कुछ भी अच्छा होगा। मैंने शब्दों को अलग करने के बारे में सोचा नहीं था, अब तक नहीं मिला था। व्यक्तिगत शब्दों में हेरफेर करने के बाद ज्यादातर लोग हैं। हालांकि, जापानी लैंगेज के साथ प्रोग्रामिंग पर कोई सुझाव उपयोगी और सराहना करता है। ईमानदार होने के लिए मैं फ़ाइलों को एक यूनिकोड मैपिंग से बचने की कोशिश कर रहा था, लेकिन ऐसा लगता है कि दोनों या दोनों का उपयोग करने की आवश्यकता है। – percent20

26
  • हर जगह यूनिकोड और utf-8 पर चिपकाएं।
  • मूल जापानी एन्कोडिंग से दूर रहें: euc-jp, shiftjis, iso-2022-jp, लेकिन ध्यान रखें कि यदि आप जारी रखते हैं तो शायद आप उन्हें किसी बिंदु पर सामना करेंगे।
  • पीओएस विश्लेषण, शब्द विभाजन आदि जैसे जटिल सामान करने के लिए एक सेगमेंटर से परिचित हो जाओ। लोकप्रियता/शक्ति के क्रम में जापानी लोगों पर एनएलपी (प्राकृतिक भाषा प्रसंस्करण) काम करने वाले अधिकांश लोगों द्वारा उपयोग किए जाने वाले मानक उपकरण हैं।, यह आप की तरह पाठ लेने के लिए अनुमति देता है

    「日本語は、とても難しいです。」

    और वापस

    kettle:~$ echo 日本語は、難しいです | mecab 
    日本語 名詞,一般,*,*,*,*,日本語,ニホンゴ,ニホンゴ 
    は 助詞,係助詞,*,*,*,*,は,ハ,ワ 
    、 記号,読点,*,*,*,*,、,、,、 
    難しい 形容詞,自立,*,*,形容詞・イ段,基本形,難しい,ムズカシイ,ムズカシイ 
    です 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス 
    EOS

    जो मूल रूप से एक विस्तृत है महान जानकारी के सभी प्रकार के मिल:

MeCab (SourceForge पर मूल रूप से) भयानक है भाषण, रीडिंग, उच्चारण इत्यादि के हिस्सों का रन-डाउन। यह आपको क्रिया काल का विश्लेषण करने का पक्ष भी देगा,

kettle:~$ echo メキシコ料理が食べたい | mecab 
メキシコ 名詞,固有名詞,地域,国,*,*,メキシコ,メキシコ,メキシコ 
料理 名詞,サ変接続,*,*,*,*,料理,リョウリ,リョーリ 
が 助詞,格助詞,一般,*,*,*,が,ガ,ガ 
食べ 動詞,自立,*,*,一段,連用形,食べる,タベ,タベ 
たい 助動詞,*,*,*,特殊・タイ,基本形,たい,タイ,タイ 
EOS

हालांकि, दस्तावेज़ीकरण जापानी में है, और सेट अप करने और आउटपुट को प्रारूपित करने के तरीके को प्रारूपित करने के लिए यह थोड़ा जटिल है।

deb http://cl.naist.jp/~eric-n/ubuntu-nlp intrepid all 
deb-src http://cl.naist.jp/~eric-n/ubuntu-nlp intrepid all

संकुल स्थापित करने के लिए: $ apt-get install mecab-ipadic-utf8 mecab python-mecab

वहाँ मोती, अज़गर, माणिक सहित भाषाओं का एक समूह में ubuntu/डेबियन के लिए उपलब्ध संकुल, और बाइंडिंग ...

ubuntu के लिए अपार्टमेंट-रेपोस हैं

मुझे लगता है कि चाल करना चाहिए।

मेकब के अन्य विकल्प हैं, ChaSen, जो कई साल पहले मेकब (जो संयोग से Google पर काम करता है), और Kakasi के लेखक द्वारा लिखे गए थे, जो बहुत कम शक्तिशाली है।

मैं निश्चित रूप से अपने स्वयं के संयोग दिनचर्या को रोल करने से बचने की कोशिश करता हूं। इसके साथ समस्या यह है कि इसे टन और टन काम की आवश्यकता होगी, जो कि पहले से ही कर चुके हैं, और नियमों के साथ सभी किनारे के मामलों को कवर करना, दिन के अंत में असंभव है।

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

जापानी के साथ मज़े करें। मुझे यकीन नहीं है कि आपका जापानी कितना अच्छा है, लेकिन अगर आपको मेकब के लिए दस्तावेज़ों के साथ मदद की ज़रूरत है या जो भी इसके बारे में पूछने में स्वतंत्र महसूस हो। शुरुआत में कांजी काफी डरावना हो सकता है।

+0

मेरी इच्छा है कि मैं इसे एक उत्तर के रूप में भी चिह्नित कर सकता हूं। :(महान जानकारी के लिए धन्यवाद। मैं केवल प्रोग्रामिंग अभ्यास के रूप में अपने स्वयं के संयुग्मन दिनचर्या करने जा रहा था और जापानी लैंगेज के आसपास कोर सीखने के लिए बेहतर था। अगर मैं जापानी में आगे जाता हूं तो मैं निश्चित रूप से एक सेगमेंटर को देखता हूं। धन्यवाद। – percent20

+1

बहुत बढ़िया पोस्ट, इसके लिए धन्यवाद। मेकैब चट्टानों – aehlke

+0

सी # के साथ खेलते समय मेकैब पर ठोकर खाई। बस यह जोड़ना चाहता था कि यह शानदार है। एक मेकैब webservice @ http://mimitako.net/api/mecapi.cgi भी है। ओह और "अनौपचारिक" सी # बाइंडिंग @ http://en.sourceforge.jp/projects/mecabdotnet/। चीयर्स! –

2

आपको व्याकरण के नियमों को देखने के लिए क्या करना है। प्रत्येक संयोग के लिए नियमों की एक श्रृंखला है। उदाहरण के लिए ~ て फॉर्म लेते हैं। Psudocode:

def te_form(verb) 
    switch verb.substr(-1, 1) == "る" then return # verb minus ru plus te 
    case "る" #return (verb - る) + て 
    case "す" #return (verb - す)+して 

आदि असल में, यह टूट प्रकार मैं, द्वितीय और तृतीय क्रियाओं में।

0

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

स्यूडोकोड:

generateDictionaryForm(verb) 
    case Ru-Verb: verb.stem + る 
    case Su-Verb: verb.stem + す 
    case Ku-Verb: verb.stem + く 
    ...etc. 

generatePoliteForm(verb) 
    case Ru-Verb: verb.stem + ります 
    case Su-Verb: verb.stem + します 
    case Ku-Verb: verb.stem + きます 
    ...etc. 

अनियमित क्रियाएं, निश्चित रूप से विशेष मामलों होगा।

इसका कुछ संस्करण किसी भी अन्य नियमित भाषा (यानी अंग्रेजी नहीं) के लिए काम करेगा।

-2

मेरे मणि (rom2jap) को स्थापित करने का प्रयास करें। यह रूबी में है।

gem install rom2jap 

खोलें अपने टर्मिनल और प्रकार:

require 'rom2jap' 
संबंधित मुद्दे