2011-07-06 10 views
5

में रिकॉर्ड करता है क्या mysql शब्दों में चयन करने का कोई तरीका है जो केवल चीनी, केवल जापानी और केवल कोरियाई हैं?केवल चीनी का चयन करना, केवल जापानी और कोरियाई केवल mysql/php

SELECT * FROM table WHERE field REGEXP '[a-zA-Z0-9]'

या यहाँ तक कि तरह एक "गंदे" समाधान:

अंग्रेज़ी में यह द्वारा किया जा सकता

SELECT * FROM table WHERE field > "0" AND field <"ZZZZZZZZ"

वहाँ पूर्वी भाषाओं/CJK पात्रों के लिए एक समान समाधान है ?

मैं समझता हूं कि चीनी और जापानी पात्र पात्र हैं इसलिए एक मौका है कि इन वर्णों का उपयोग करने वाले जापानी शब्द चीनी शब्दों के लिए गलत हो जाएंगे। मुझे लगता है कि उन शब्दों को फ़िल्टर नहीं किया जाएगा।

शब्द एक utf-8 स्ट्रिंग फ़ील्ड में संग्रहीत हैं।

यदि यह mysql में नहीं किया जा सकता है, तो क्या यह PHP में किया जा सकता है?

धन्यवाद! :)

संपादित करें 1: डेटा में शामिल नहीं है जिसमें स्ट्रिंग है, इसलिए मैं किसी अन्य फ़ील्ड द्वारा फ़िल्टर नहीं कर सकता। संपादित करें 2: एक अनुवादक एपीआई का उपयोग करके बिंग की तरह (Google उनके अनुवादक एपीआई को बंद कर रहा है) एक दिलचस्प विचार है, लेकिन मैं तेजी से रेगेक्स-स्टाइल समाधान की उम्मीद कर रहा था।

+1

1) अपनी स्ट्रिंग को कच्चे कोडपॉइंट्स (उदा। यूसीएस -4) में बदलें। 2) प्रत्येक वर्ण की जांच करें यदि यह आपकी वांछित सीमा के भीतर है। सीजेके ग्लाइफ के लिए आप भाग्यशाली हो सकते हैं और वे वास्तव में एक संगत रेंज (या कम से कम केवल एक मुट्ठी भर) के लिए। –

+0

यह समान है, लेकिन समान नहीं है, http://stackoverflow.com/questions/1441562/detect-language-from-string-in-php – Arafangion

उत्तर

3

अक्षरों की एक यूटीएफ -8 श्रेणी की खोज सीधे MySQL regexp में समर्थित नहीं है। जहां यह कहा गया regexp के लिए mySQL संदर्भ देखें:

चेतावनी regexp और RLIKE ऑपरेटरों बाइट के लिहाज से फैशन में काम करते हैं, तो वे नहीं मल्टी-बाइट सुरक्षित हैं और उत्पादन हो सकता है मल्टी-बाइट साथ अप्रत्याशित परिणाम चरित्र सेट

सौभाग्य से PHP में आप ऐसे रेगेक्सपी बना सकते हैं उदा।

/[\x{1234}-\x{5678}]*/u 

साथ (ध्यान दें regexp के अंत में u)। इसलिए आपको अपनी अलग-अलग भाषाओं के लिए उपयुक्त श्रेणियां ढूंढनी होंगी। unicode code charts का उपयोग करने से आप भाषा के लिए उचित स्क्रिप्ट चुन सकते हैं (हालांकि सीधे भाषा ही नहीं)।

+0

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

+0

@ अराफांगियन - हंगुल पात्रों का उपयोग केवल कोरियाई और कटाकाना पात्रों द्वारा जापानी के लिए किया जाता है। चीनी पात्रों, जहां स्वीकार्य रूप से, कुछ दूसरी ऑर्डर जांच की आवश्यकता हो सकती है, केवल संभावित अस्पष्टता की आवश्यकता हो सकती है। – borrible

+0

कांजी के बारे में क्या? रोमानी जापानी पाठ? – Arafangion

0

आप एक और डेटा संरचना पर विचार कर सकते हैं जिसमें शब्दों और पात्रों, और वह भाषा शामिल है जिसे आप उन्हें जोड़ना चाहते हैं।

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

1

आप चरित्र अकेले सेट से ऐसा नहीं कर सकते - विशेष रूप से आधुनिक समय जहां एशियाई ग्रंथों अक्सर "romanized" हैं, वह है, रोमन लिपि, कि ने कहा, आप केवल ग्रंथों हैं कि चयन करना चाहते हैं, तो साथ लिखा सतही रूप से 'एशियाई', ऐसा करने के तरीके हैं कि आप कितना जटिल होना चाहते हैं और आपको कितना सटीक होना चाहिए।

लेकिन ईमानदारी से, मेरा सुझाव है कि आप अपने डेटाबेस में एक नई "भाषा" फ़ील्ड जोड़ें और यह सुनिश्चित करें कि यह सही ढंग से आबादी वाला है।

जिसके अनुसार, यहाँ कुछ उपयोगी लिंक आप में रुचि हो सकती हैं:

बाद लागू करने के लिए अपेक्षाकृत जटिल है, लेकिन एक बेहतर परिणाम अर्जित करता है।

वैकल्पिक रूप से, मेरा मानना ​​है कि Google के पास एक (ऑनलाइन) एपीआई है जो आपको पहचानने और भाषा का अनुवाद करने की अनुमति देगी।

एक दिलचस्प कागज है कि इस अभ्यास की निरर्थकता का प्रदर्शन करना चाहिए:

अंत में, आप से पूछना:

इस mysql में किया जा नहीं कर सकते हैं - कैसे क्या यह PHP में किया जा सकता है?

PHP में ऐसा करने के लिए यह अधिक आसान होने की संभावना है क्योंकि आप प्रश्न में भाषा स्ट्रिंग पर गणितीय विश्लेषण करने में सक्षम हैं, हालांकि आप शायद परिणामों को डेटाबेस में वापस फ़ीड करना चाहते हैं प्रदर्शन कारणों के परिणामों को कैशिंग करने का तरीका।

0

कोरियाई ज्यादातर हंगुल नामक अपने वर्णमाला का उपयोग करता है। कभी-कभी कुछ हान पात्रों को फेंक दिया जाएगा।

जापानी तीन लेखन प्रणालियों का संयुक्त उपयोग करता है। इनमें से, कटाकाना और हिरगाना जापानी के लिए अद्वितीय हैं और इस प्रकार कोरियाई या चीनी पाठ में शायद ही कभी उपयोग किया जाता है।

जापानी और चीनी दोनों हान पात्रों का उपयोग करते हैं, हालांकि इसका मतलब यूनिकोड रेंज है, इसलिए चरित्र श्रृंखलाओं के आधार पर उन्हें अलग करने का कोई आसान तरीका नहीं है!

हालांकि कुछ ह्युरिस्टिक्स हैं।

मुख्य भूमि चीन सरलीकृत पात्रों का उपयोग करता है, जिनमें से कई अद्वितीय हैं और इस प्रकार जापानी या कोरियाई पाठ में शायद ही कभी उपयोग किया जाता है।

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

लेकिन निश्चित रूप से ऐसे कई मौके हैं जहां पात्रों के समान तार जापानी और चीनी दोनों के रूप में मान्य हैं, खासकर बहुत कम तारों के मामले में।

एक विधि जो सभी पाठों के साथ काम करेगी वह पात्रों के समूहों को देखना है। इसका अर्थ यह है कि एन-ग्राम और शायद मार्कोव मॉडल अराफांगियन के जवाब में उनके जवाब में उल्लेख करते हैं। लेकिन ध्यान रखें कि बहुत कम तारों के मामले में यह मूर्खतापूर्ण नहीं है!

और निश्चित रूप से इनमें से कोई भी किसी भी डेटाबेस सॉफ़्टवेयर में लागू नहीं किया जा रहा है, इसलिए आपको इसे अपनी प्रोग्रामिंग भाषा में करना होगा।

संबंधित मुद्दे