2012-05-30 18 views
14

में मैं अंग्रेजी के लिए और अवधारणाओं में से कुछ हालांकि रेगुलर एक्सप्रेशन (RegEx) के बारे में सीख रहा हूँ जैसे वे जैसे जापानी अन्य भाषाओं पर लागू होता है, मैं के रूप में अगर कई अन्य लोगों के नहीं होता लग रहा है लग रहे हैं। उदाहरण के लिए, रेगेक्स का एक सामान्य उपयोग यह पता लगाना है कि किसी शब्द में गैर अल्फान्यूमेरिक वर्ण हैं या नहीं। मैं नहीं देखता कि यह तकनीक और साथ ही अन्य जापानी के लिए कैसे काम करेंगे क्योंकि केवल तीन लेखन प्रणालियां नहीं हैं, लेकिन कांजी भी बहुत जटिल हैं और अल्फा न्यूमेरिक पात्रों की तुलना में बहुत अधिक रेंज हैं। मैं इस विषय पर और साथ ही क्षेत्रों को देखने के लिए किसी भी जानकारी की सराहना करता हूं क्योंकि इस विषय पर मुझे बहुत कम ज्ञान है हालांकि मैंने कई जापानी पाठ्यक्रम ले लिए हैं। यदि संभव हो, तो मैं आपके उत्तरों को पायथन और जावा का उपयोग करना चाहूंगा क्योंकि वे भाषाएं हैं जिनके साथ मैं सहज हूं। आपके सहयोग के लिए धन्यवाद।रेगुलर एक्सप्रेशन (RegEx) जापानी

+0

अधिकांश regex कार्यान्वयन यूनिकोड समर्थन करते हैं। लिखने के लिए किस तरह के regexes एक अलग सवाल है। – SLaks

+0

@ कुछ जोन्स: आप यूनिकोड के हेक्स मान का उपयोग करके जापानी वर्णों को लागू कर सकते हैं। ई।जी: \ uXXXX जिसमें XXXX यूनिकोड चरित्र का मान है। – jaselg

+0

कुछ ऐसा जो मदद कर सकता है: http://www.rikai.com/library/kanjitables/kanji_codes.unicode.shtml। ध्यान दें कि यह एक ही चरित्र के जापानी ग्लिफ से चीनी ग्लिफ को अलग नहीं करता है। – nhahtdh

उत्तर

10

अजगर regexes यूनिकोड सुविधाओं के लिए सीमित समर्थन प्रदान करते हैं। जावा बेहतर विशेष रूप से जावा 7.

जावा यूनिकोड श्रेणियों का समर्थन करता है है। उदा।, \p{L} (और इसके शॉर्टेंड, \pL) किसी भी भाषा में किसी भी पत्र से मेल खाता है। इसमें जापानी वैचारिक पात्र शामिल हैं।

जावा 7 हीरागाना, काताकाना, हान, और लैटिन लिपियों कि जापानी पाठ आम तौर से बना है सहित यूनिकोड स्क्रिप्ट, का समर्थन करता है। आप \p{Han}, \p{Hiragana}, \p{Katakana}, और \p{Latin} का उपयोग करके इन स्क्रिप्ट में से किसी एक में किसी भी चरित्र से मेल खा सकते हैं। आप उन्हें [\p{Han}\p{Hiragana}\p{Katakana}] जैसे चरित्र वर्ग में जोड़ सकते हैं। हान स्क्रिप्ट के अलावा किसी भी चरित्र से मेल खाने के लिए आप अपरकेस P (जैसे \P{Han}) का उपयोग कर सकते हैं।

जावा 7 यूनिकोड ब्लॉक का समर्थन करता है। एंड्रॉइड में अपना कोड चलाने तक (जहां स्क्रिप्ट उपलब्ध नहीं हैं), आपको आम तौर पर ब्लॉक से बचना चाहिए, क्योंकि वे यूनिकोड स्क्रिप्ट से कम उपयोगी और सटीक हैं। वहाँ सहित जापानी पाठ से संबंधित ब्लॉक, की एक किस्म है \p{InHiragana}, \p{InKatakana}, \p{InCJK_Unified_Ideographs}, \p{InCJK_Symbols_and_Punctuation}, आदि

दोनों जावा और अजगर \uFFFF, जहां FFFF किसी भी चार अंकों headecimal संख्या है का उपयोग करते हुए अलग-अलग कोड अंक देख सकते हैं। जावा 7 किसी भी यूनिकोड कोड बिंदु का संदर्भ ले सकता है, जिसमें मूल बहुभाषी विमान से परे, उदाहरण के लिए \x{10FFFF}। पाइथन रेगेक्स 21-बिट यूनिकोड का समर्थन नहीं करते हैं, लेकिन पायथन स्ट्रिंग करते हैं, इसलिए आप रेगेक्स में कोड कोड को एम्बेड कर सकते हैं उदा। \U0010FFFF (अपरकेस U आठ हेक्स अंकों के बाद)।

जावा 7 (?U) या UNICODE_CHARACTER_CLASS झंडा \w और \d की तरह चरित्र वर्ग shorthands यूनिकोड जागरूक बनाता है, तो वे जापानी आइडियोग्राफ़िक वर्ण, आदि के अनुरूप होगा (लेकिन ध्यान दें कि \d अभी भी 一二 की तरह नंबर के लिए कांजी से मेल नहीं खाएगी 三四) । पायथन 3 शॉर्टेंड क्लास यूनिकोड डिफ़ॉल्ट रूप से जागरूक बनाता है। पायथन 2 में, जब आप re.UNICODE या re.U ध्वज का उपयोग करते हैं तो शॉर्टेंड क्लास यूनिकोड जागरूक होते हैं।

आप सही हैं कि सभी regex विचार सभी स्क्रिप्ट के लिए समान रूप से अच्छी तरह से नहीं लेते हैं। कुछ चीजें (जैसे कि अक्षर आवरण) सिर्फ जापानी पाठ के साथ समझ में नहीं आता है।

+0

जावा पैराग्राफ के अनुसार दूसरा अनुच्छेद गलत होने की संभावना है। ** क्या आपने परीक्षण किया है? ** बाकी मैं अब परीक्षण नहीं कर सकता। – nhahtdh

+0

पायथन संस्करण 3 रेगेक्स यूनिकोड का समर्थन करता है वैसे ही जावा 7 पैटर्न वर्ग के लिए करता है: http://docs.python.org/py3k/library/re.html – nhahtdh

+0

@nhahtdh, आपकी टिप्पणियां सहायक नहीं हैं। हां, जावा यूनिकोड स्क्रिप्ट्स (मेरे दूसरे पैराग्राफ में वर्णित) का समर्थन करता है, और उन्हें "इज़" उपसर्ग का उपयोग करने की आवश्यकता नहीं है (मैं "इज़" का उपयोग न करने की अनुशंसा करता हूं, क्योंकि इससे इसे कम पोर्टेबल बनाता है)। और नहीं, पाइथन 3 में इसके रेगेक्स सिंटैक्स में यूनिकोड फीचर्स के लिए लगभग समान समर्थन नहीं है जैसे जावा (कोई यूनिकोड स्क्रिप्ट, श्रेणियां, ब्लॉक इत्यादि) नहीं है। – slevithan

3

जावा चरित्र वर्गों के लिए आप क्या देख रहे हैं की तरह कुछ है। वे वे हैं जो \ p here से शुरू होते हैं।

+0

@nhahtdh: कृपया विशेष रूप से प्रयास करने के लिए किसी चीज़ के बारे में एक प्रश्न पूछें। – Ashe

+0

मुझे पता चला कि जब मैं इस कोड को चलाता हूं तो मुझे झूठा क्यों लगता है: http://ideone.com/p3P9b मेरे कंप्यूटर पर। संकलन कमांड सही ढंग से काम करने के लिए 'javac -encoding utf8 ' होना चाहिए। – nhahtdh

6

अजगर

लिए
#!/usr/bin/python 
# -*- coding: utf-8 -*- 

import re 

kanji = u'漢字' 
hiragana = u'ひらがな' 
katakana = u'カタカナ' 
str = kanji + hiragana + katakana 

#Match Kanji 
regex = u'[\u4E00-\u9FFF]+' # == u'[一-龠々]+' 
match = re.search(regex, str, re.U) 
print match.group().encode('utf-8') #=> 漢字 

#Match Hiragana 
regex = u'[\u3040-\u309Fー]+' # == u'[ぁ-んー]+' 
match = re.search(regex, str, re.U) 
print match.group().encode('utf-8') #=> ひらがな 

#Match Katakana 
regex = u'[\u30A0-\u30FF]+' # == u'[ァ-ヾ]+' 
match = re.search(regex, str, re.U) 
print match.group().encode('utf-8') #=>カタカナ 
संबंधित मुद्दे