2009-02-04 21 views
12

मेरे पास एक फ़ाइल है जिसमें "सीधी" (सामान्य, ASCII) उद्धरण शामिल हैं, और मैं उन्हें वास्तविक quotation mark glyphs ("घुंघराले" उद्धरण, यू + 2018 से यू + में परिवर्तित करने की कोशिश कर रहा हूं। 201D)। चूंकि दो अलग-अलग कोट वर्णों में से एक में परिवर्तन पहली जगह में हानिकारक रहा है, जाहिर है कि इस रूपांतरण को स्वचालित रूप से करने का कोई तरीका नहीं है; फिर भी मुझे संदेह है कि कुछ ह्यूरिस्टिक्स ज्यादातर मामलों को कवर करेंगे। प्रत्येक सीधे उद्धरण कैरेक्टर के लिए,सीधे उद्धरणों को घुमावदार उद्धरणों में परिवर्तित करने के विचार

  1. अनुमान जो घुंघराले उद्धरण कैरेक्टर उपयोग करने के लिए, यदि संभव हो तो
  2. उपयोगकर्ता पूछना (मुझे) पुष्टि करने के लिए: तो योजना एक स्क्रिप्ट (Emacs में) जो निम्न की तरह कुछ करता है , या एक विकल्प

यह सवाल पहले कदम के बारे में है: क्या एक अच्छा एल्गोरिथ्म (heuristics का एक सेट है, और अधिक की तरह) होगा उपयोग करने के लिए, सामान्य अंग्रेजी पाठ के लिए (एक उपन्यास, उदाहरण के लिए)?

  1. एक दोहरे-उद्धरण एक पंक्ति के आरंभ में है, तो लगता है कि यह एक उद्घाटन उद्धरण है: यहाँ कुछ प्रारंभिक विचारों, जो मैं (! जवाबी स्वागत है) डबल उद्धरण के लिए काम का मानना ​​है कि कर रहे हैं।
  2. यदि एक पंक्ति के अंत में एक डबल-कोट है, तो एक समापन उद्धरण का अनुमान लगाएं।
  3. यदि किसी स्थान से डबल-कोट पहले होता है, तो एक उद्घाटन उद्धरण का अनुमान लगाएं।
  4. यदि किसी स्थान द्वारा डबल-कोट का पालन किया जाता है, तो एक समापन उद्धरण का अनुमान लगाएं।
  5. यदि कोई डबल-कोट उपर्युक्त श्रेणियों में से किसी एक में फिट नहीं होता है, तो अनुमान लगाएं कि यह हाल ही में उपयोग किए जाने वाले डबल-कोट के "विपरीत" है।

एकल उद्धरण, जटिल काम है, क्योंकि एक ' या तो एक खोलने बोली, बंद करने बोली, या apostrophe हो सकता है, और हम अक्षर लोप अकेला छोड़ने के लिए (नहीं लिखना चाहिए "नहीं करना चाहिए") चाहते हैं। उपर्युक्त नियमों में से कुछ नियम लागू होते हैं, लेकिन 'संभवतः धर्मप्रवाह शब्द (या रेखाओं) की शुरुआत में होते हैं, हालांकि यह अतीत में' twas 'से कम आम है। मैं उन नियमों के बारे में सोच नहीं सकता जो उचित रूप से ["मुझे पसंद है '' 70 'शो' जैसे टुकड़ों को संभाल लेंगे। इसे सिर्फ पड़ोसी पात्रों से अधिक देखने की आवश्यकता हो सकती है, और उद्धरणों के बीच दूरी की गणना करनी पड़ सकती है, उदाहरण के लिए ...

कोई और विचार? यह ठीक है अगर सभी संभावित मामलों को कवर नहीं किया गया है; लक्ष्य जितना संभव हो उतना बुद्धिमान होना है लेकिन आगे नहीं। :-)

संपादित: कुछ और चीजें हैं जो के बारे में सोच के लायक हो सकता है (या अप्रासंगिक यकीन नहीं हो सकता है,):

  • उद्धरण हमेशा जोड़े मिलान में नहीं हो सकता है: एकल उद्धरण के लिए यह स्पष्ट है कि उपरोक्त के रूप में क्यों। लेकिन यहां तक ​​कि डबल कोट्स के लिए, जब एक उद्धरण होता है जो एक से अधिक अनुच्छेदों के लिए विस्तारित होता है, सामान्य टाइपोग्राफिक सम्मेलन (मुझे क्यों नहीं पूछें) प्रत्येक अनुच्छेद को उद्धरण चिह्न के साथ शुरू करना है, भले ही यह पिछले में बंद नहीं हुआ हो एक। तो बस एक राज्य मशीन को रखकर जो दो राज्यों के बीच वैकल्पिक होगा काम नहीं करेगा!
  • नेस्टेड उद्धरण (उपरोक्त उदाहरण "मुझे पसंद है" में उल्लिखित "मुझे पसंद है": यह किसी भी तरह का उद्धरण किसी स्थान से पहले या उसके बाद हो सकता है।
  • ब्रिटिश/अमेरिकी विराम चिह्न शैली: उद्धरण या बाहर के अंदर अल्पविराम हैं?
  • कई शब्द प्रोसेसर (जैसे माइक्रोसॉफ्ट वर्ड) पहले से ही इस तरह के कुछ रूपांतरण करते हैं। हालांकि वे सही नहीं हैं और अक्सर कष्टप्रद हो सकता है, यह जानने के लिए वे कैसे काम करते शिक्षाप्रद हो सकती है ...
+0

मैं अंत में वास्तविक दस्तावेज पर रूपांतरण किया था। पहले चार नियम सभी को कवर किया डबल कोट्स। सिंगल कोट्स के लिए, "तुरंत कॉमा या फुल स्टॉप का पालन करता है" कई समापन उद्धरणों को संभाला जाता है, और बाकी सभी को मैन्युअल रूप से संभालना पड़ता है। – ShreevatsaR

उत्तर

2

अनुमान जो घुंघराले उद्धरण कैरेक्टर उपयोग करने के लिए, संभव

अगर यह नहीं है सामान्य मामले में।

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

हम अक्षर लोप अकेला छोड़ने के लिए

मैं मानता हूँ चाहते हैं ! लेकिन बहुत से लोग नहीं करते हैं। यह एक सामान्य टाइपसेटिंग अभ्यास है जो एक एस्ट्रोफ़े को बाएं-फेस सिंगल कोट में बदल देता है। नली मैं उन्हें छोड़ने के लिए पसंद करता हूं, उन्हें उद्धरण संलग्न करने से अलग करने के लिए, पाठ को आसान (मुझे लगता है) पढ़ने के लिए, और स्वचालित रूप से प्रक्रिया करने के लिए संभव बनाता है।

हालांकि यह वास्तव में मेरा स्वाद है और इसे आम तौर पर केवल उचित नहीं माना जाता है क्योंकि चरित्र को यूनिकोड मानक द्वारा एपोस्ट्रॉफ़ के रूप में परिभाषित किया जाता है।

'टिस संभव अक्षर लोप शब्द

दरअसल की शुरुआत में कर रहे हैं। क्लासिक फिश 'एन' चिप्स जैसे मामलों में एक संभावित खुले उद्धरण से एक एस्ट्रोफ़े को बताने का कोई तरीका नहीं है, जो सांस्कृतिक संदर्भ की भारी मात्रा में कम है।

तो सबसे अच्छा होगा (नहीं अभाज्य संख्या, okinas, glottal बंद हो जाता है और apostrophe के विभिन्न अन्य उपयोगों ... उल्लेख करने के लिए), ज़ाहिर है, एक कीबोर्ड लेआउट सीधे स्मार्ट उद्धरणों टाइप कर सकते हैं कि स्थापित है। मेरे पास AltGr + [], "" AltGr + Shift + [] पर है, - AltGr + [Shift] + डैश पर, और इसी तरह।

+0

अच्छे अंक! दुर्भाग्यवश, मैं इस फ़ाइल के साथ पहले से ही 3/4 वां कर चुका हूं (एक ओसीआरड पब्लिक-डोमेन बुक को दोबारा सुधारना) और हालांकि मैंने कुछ बदलावों को मैन्युअल रूप से करने की कोशिश की, लेकिन मैंने ध्यान दिया कि इनमें से अधिकतर स्वचालित हो सकते हैं ... और इससे उत्पन्न हुआ यह प्रश्न। :) – ShreevatsaR

+0

ओह, वहां गया! हाँ, मैं आमतौर पर इसे ऊपर की सरल विधि के साथ करता हूं, लेकिन एस्ट्रोफ़ेस छोड़कर वे एक शब्द के अंदर होते हैं। यह अभी भी प्रारंभिक-एस्ट्रोफ़ेस और बहुवचन-अधिकारियों को पहचानने के लिए मैन्युअल प्रूफिंग लेता है जो गलत तरीके से परिवर्तित हो गए हैं। – bobince

1
  1. बुनियादी बात हमेशा मिलान जोड़े को खोजने के लिए प्रयास करने के लिए है। यह देखते हुए कि प्रत्येक उद्धरण में एक मिलान करने वाला उद्धरण है, आप अपने कार्यक्रम को केवल आपकी मदद के लिए पूछ सकते हैं, जहां यह अनिश्चित है कि मिलान करने वाला उद्धरण कौन सा है।

  2. खुले उद्धरण हमेशा एक पंक्ति के उद्घाटन पर होते हैं या उनके सामने में स्थान रखते हैं। के बाद बंद होने वाले उद्धरण हमेशा एक स्थान । यदि आपको निम्न उद्धरण के साथ एक कोलन मिलता है तो यह शायद एक समापन उद्धरण है।

  3. यदि उद्धरण के बाद वाला अक्षर ऊपरी मामला है तो यह शायद एक उद्घाटन उद्धरण है।

  4. यदि उद्धरण के सामने एक विराम चिह्न है तो यह शायद एक समापन उद्धरण है।

  5. इसे पुन: प्रयास करने का प्रयास करें। कार्यक्रम आपको पहले उन सभी उद्धरणों के लिए पूछना चाहिए जो यह निश्चित रूप से किसी फ़ंक्शन को असाइन कर सकते हैं। (बस यह सुनिश्चित करने के लिए कि उसने कोई त्रुटि नहीं की है।)

  6. दूसरे दौर में सभी उद्धरणों की तरह कुछ यह सुनिश्चित नहीं है कि वे उद्धरण या apostrophes खोल रहे हैं या नहीं। सभी शुरुआती उद्धरणों के लिए इसे स्वचालित रूप से समापन उद्धरण मिलना होगा।

एक और, शायद कम जटिल, विचार हो सकता है:

  1. खोजें सभी गैर उद्धरण हर एक है कि संभावित एक उद्धरण या हो सकता है के बारे में उपयोगकर्ता पूछकर एक गैर बोली।

  2. सभी शेष उद्धरण कनवर्ट करने के लिए काफी आसान होना चाहिए। खुले उद्धरणों में उनके सामने एक स्थान या नई रेखा होती है और उनके बाद बंद होती है। सोचा था की

एक आखिरी टुकड़ा:

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

3

एक से शुरुआत कर सकते एक राज्य मशीन के साथ होगा:

  • स्थिति 0 पर प्रारंभ हो, वर्ण
  • एक उद्धरण खोजने पर अधिक पुनरावृति, "उद्धृत" राज्य (खुला उद्धरण) दर्ज
  • "उद्धृत" में तो राज्य और आप एक बोली सामना करते हैं, करने के लिए "शुरू" राज्य (बंद करने उद्धरण)

आप राज्य संक्रमण से प्रत्येक में अतिरिक्त निर्णय कर सकते हैं वापसी।

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

मेरे $ 0,02

+1

यह केवल यह मान रहा है कि उद्धरण वर्ण वैकल्पिक रूप से उद्धरण और समापन उद्धरण खोल रहे हैं, कुछ जो जबरदस्त * सत्य * नहीं है। – ShreevatsaR

+0

यही वह जगह है जहां सामान्यीकरण आता है। अगर आपको पता है कि एक पैराग्राफ ब्रेक है, तो आप नकली उद्धरण को किसी और चीज़ में बदल सकते हैं। राज्य मशीन सामान्यीकृत पाठ को संसाधित करने का एक साधन है। आम तौर पर , सभी के लिए खोज रहे हैं ट्रेंज "केस सभी" अच्छे "मामलों के लिए लेखांकन से आसान है। –

+0

वैकल्पिक विकल्प आसान विकल्प है, और आपके सहित, इसे संभालने के कई तरीके हैं। मैं हेरिस्टिक्स का एक बड़ा सेट खोजने की कोशिश कर रहा हूं (केवल "वैकल्पिक" से अधिक) जो जितना संभव हो सके उतने मामलों को संभालता है। इस जवाब में ह्यूरिस्टिक्स पहले से ही इस मामले की तुलना में अधिक मामलों को कवर करता है (5) करता है। – ShreevatsaR

1

मुझे यह कहने से नफरत है, लेकिन कार्रवाई का सबसे अच्छा तरीका यह हो सकता है कि वर्ड क्या करता है, और इसकी प्रतिलिपि बनाएँ। यहां तक ​​कि यदि कुछ मामलों में यह गलत है, तो यह एक मानक का प्रतिनिधित्व करता है कि कई लोग आदी हो गए हैं। अनुकरण करने के लिए एक व्यवहार पूर्ववत (Ctrl-Z) को घुमावदार प्रतिस्थापित करने के तुरंत बाद सीधे उद्धरण पर वापस आ रहा है।

+0

हां, मैंने उपरोक्त प्रश्न में उल्लेख किया है। एक शब्द कैसे पढ़ता है? :) – ShreevatsaR

+1

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

+1

अधिक विशिष्ट होने के लिए - वे उपयोग कर रहे एल्गोरिदम की परिकल्पना उत्पन्न करते हैं, और परीक्षण मामलों के साथ आते हैं जो परिकल्पना को अस्वीकार करेंगे। यदि आप असफल होते हैं, तो संभवतः आपने एल्गोरिदम सही ढंग से अनुमान लगाया है। –

0

[ "मैं 70 के दशक शो 'यही कारण है कि' '", उसने कहा]

मैं मूल रूप से हो सकता है पाठ के साथ इसने कई गुजरता का उपयोग कर सोचा संदर्भ जानकारी हासिल करने में मदद कर सकते हैं लेकिन यह है कि सभी उदाहरणों का समाधान नहीं होगा।

सबसे अच्छी चीज जो आप कर सकते हैं वह संभव है कि 'twas,' tis, '70 के इत्यादि जैसे संभावित शब्द सेट/अभिव्यक्तियों की एक सूची चलाएं और उन्हें स्ट्रेट्स को कर्ल में बदलने के लिए ऑटो-सुधार के साथ शब्दकोश में फेंक दें और इसके विपरीत। वर्तनी जांच हर शब्द पर चलती है वैसे भी वे नहीं? (खेद है कि आपकी emacs समस्या में मदद नहीं करता है)

ओओ एक ही उद्धरण घुमाव को सभी जो मैं बता सकता हूं उसे अनदेखा करता हूं।

Wikipedia इन अजीब चीज़ों पर थोड़ी सी जानकारी है।

2

ऐसा लगता है कि आपके आरंभिक पोस्ट की तरह शामिल किया गया विचारों मैं यहाँ लिखने के लिए जा रहा था के अधिकांश, यह मैं क्या छोड़ दिया गया है ...

apostrophe उदाहरण ("मुझे पसंद के लिए 70 के दशक शो 'यही कारण है कि' '', उसने कहा), यह असंभव है कि उद्धरण सीधे उसी प्रकार के उद्धरण के अंदर घोंसला जाएगा। आप इसका लाभ उठा सकते हैं।

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

1

यहाँ एक रेगुलर एक्सप्रेशन डबल उद्धरण के लिए मदद कर सकता है है:

/([^\s\(]?)"(\s*)([^\\]*?(\\.[^\\]*)*)(\s*)("|\n\n)([^\s\)\.\,;]?)/gms 

यह प्रत्येक अनुच्छेद में पुनः आरंभ करेगा, और यह उद्धरण के जोड़े की पहचान करेगा (और भी आप यह देखना होगा कि रिक्ति है की अनुमति देगा उद्धरण से पहले और बाद में सही, अगर यह उपयोगी है)।

Numbered element identification 
    1    non-white-space before quote quote 
    2    white-space after leading quote 
    5    white-space before trailing quote 
    6    trailing quote (or double-newline, i.e. start of a paragraph 
    7    character after trailing quote if not whitespace or right paren      

मुझे लगता है कि अपने अन्य मामलों के लिए यह विस्तार करने के लिए उचित होगा (मैं बस नहीं की जरूरत अभी तक करना पड़ा है।)

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

1

Computational linguistics कोई भी?

किसी ने उल्लेख किया कि यदि आपके पास सांस्कृतिक संदर्भ की एक बड़ी मात्रा है, तो यह संभव हो सकता है। तो समस्या के लिए ओवरकिल लेकिन सबसे सटीक स्वचालित समाधान shallow parsing है। इसके लिए आप जिस भी भाषा और मोड के साथ काम कर रहे हैं उसका एक कॉर्पस आवश्यक है (उदा। सामान्य अंग्रेजी के लिए the Brown corpus)।

कॉर्पस में होने वाले घुंघराले उद्धरणों के वाक्य रचनात्मक संदर्भ के आधार पर घुंघराले उद्धरणों के लिए एक वर्गीकरण विकसित करना। अंत में, अपने मनमाने ढंग से वाक्य रचनात्मक संदर्भ को अपने वर्गीकृत को सीधे उद्धरण दें और बाहर सबसे संभावित उद्धरण चरित्र पॉप आउट करें!

+0

... और यदि आप इस दिशा में जाना चाहते हैं, तो http://en.wikipedia.org/wiki/Natural_Language_Toolkit इसके बारे में जानने के लिए एक अच्छी जगह है, और इसे लागू करने के लिए टूल ढूंढें। (प्राकृतिक भाषा प्रसंस्करण और पायथन में एक साथ एक ट्यूटोरियल।) – dkretz

0

प्रयास करें Shift + Ctrl + "(दोहरे उद्धरण कुंजी), इस विंडोज़ 10 पर मेरे लिए काम किया, एक कार्यक्रम Kalipso कहा जाता है का उपयोग कर।

+0

क्षमा करें, यह सवाल का जवाब नहीं देता है और यह वह नहीं है जो मैं पूछ रहा था। मुझे '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' प्रश्न * एल्गोरिदम/हेरिस्टिक/नियमों का एक सेट * के साथ आने के बारे में था जब * कौन सा चरित्र डालने के लिए। – ShreevatsaR

+0

बस मेरे लिए क्या काम किया, अच्छी किस्मत इसे समझने ... –

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