AppleScript में स्वरों और विराम चिह्न का हिब्रू पाठ कैसे छीनें?


3

उदाहरण के लिए, हिब्रू में उत्पत्ति के पहले कई छंदों को लें:

ֵֵֵָָ֣֣שִׁ֖שִׁ֖ ֵֵֵֵֵָָּּ א אלֵהֵיֱ אַשָּׁת הַשָּׁמְיְ וָאִםת הָאָֽרֵ

ו הְאָ֗רֶץ הָיָ֥ת ה תּ֙הוָ וָבֹ֔הוְחֹ֖שֶׁךְ וּ עּל־פְּנֵ֣י תְה֑וֹם וְר֣וּחַ אללָהִ֔ים מְרַחֶ֖פֶת עַל־פְּנֵ֥י הַמָּֽיִם׃יָ

ו יֹאמֶר אֱלִ֖הםיְ יִ֣ה֑י א֑וֹר וִי הַֽי־אֽוֹרֹּ֥

अधिक जानकारी के लिए

ו יֹקְרָ֨א אַלִ֤הםי׀ ָ לַאוֹר֔ יְו֙ וְלַחֹ֖שֶׁךְ קָ֣רָא לָ֑יְלָה וַֽיְהִי־עֶ֥רֶב וַֽיְהִי־בֹ֖קֹ֖ר י֥וִּוִּ

(ऐसा (פ)किसी कारण से ब्लॉकचोट में ठीक से प्रारूपित नहीं होता है, लेकिन यह मेरी पाठ फ़ाइल में होता है।)

अब, मैं मानक 27 अक्षर हिब्रू वर्णमाला के अलावा सभी पात्रों के इस पाठ पट्टी करना चाहते हैं אבגדהוזחטיכךלמםנןסעפףצץקרשתपंक्ति विराम (जो स्क्रिप्ट संपादक स्वचालित रूप से के रूप में पार्स करता है, के साथ साथ \n) और लाइन और पैराग्राफ टूटता है ( :और (פ)या (ס))। आप कई लाइनों पर ध्यान देंगे कि हाइफ़न हैं - जिन्हें एक स्थान से बदला जाना चाहिए। कुछ पंक्तियों में यह भी शामिल है |- जिन्हें एकल के साथ प्रतिस्थापित किया जाना चाहिए । जब किया जाता है, तो यह दिखना चाहिए:

उत्तर कोरिया के शासक ने उत्तर दिया

उत्तर कोरियाई लोग उत्तर कोरिया के उत्तर कोरिया के उत्तर अफ्रीका के क्षेत्र में जाने के लिए

ויאמר אלהים יהי אור ויהי אורר

अब तक की यात्रा के लिए איייא הוויכ הווויי

ויקרא אלהים לאור יוו ולחשך קרא לילה ויהי ערב ויהי בקר יום אחד׃ (פ)

मैं पहली बार में कुछ सरल करने की कोशिश की - हिब्रू वर्णमाला सेट प्लस , (और )एक सूची, स्थापित करने के लिए xइनपुट स्ट्रिंग की लंबाई है, तो तार का हर किरदार के लिए बार-बार करते हैं: अगर यह सूची में है, तो से संलग्न आउटपुट; अगर यह एक है -, उत्पादन में संलग्न ; यदि यह एक है \और अगला एक है n, \nतो आउटपुट में जोड़ें ; और यदि एक पंक्ति में दो स्थान हैं, तो दूसरा हटाएं।

मैंने आउटपुट को लॉग इन किया और कुछ अस्पष्ट हो गया:

(*אאית   א    ים  ת     ם   ת    ץץץץץץץץ    ה  הה   הה       ללללי    ם         ים     ת  ללללי    םםםםםאאר    ים   י   ר    ייייררררררא    ים  תתתתתר  ייייב     ל    ים  ין    ר   ין           א    ים    אאא   ם         א    ה    ייייב    ייייר   ם   דד (פ)*)

जो बिना किसी स्वर के पारित होने के हर अक्षर को लगता है, इस घटना में दोहराया गया है कि निम्नलिखित अक्षर हैं। (रिपीट पर मेरी गलती - रिपीट लूप को खराब तरीके से लिखा गया है।) लेकिन यह उन कंसोनेंट्स पर छोड़ देता है जिनमें स्वर भी होते हैं जो मुझे आश्चर्यचकित करते हैं।

इसलिए मैंने एक परीक्षण किया:

set charNum to ASCII number "בְּ"
log charNum
set charNum to ASCII number "ב"
log charNum
-->result: (*63*) (*63*)

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

तो मैं किसी भी संभावित पत्र और स्वर संयोजन के लिए एक-लूप न करते हुए अक्षरों से स्वर और उसी तरह कैसे छीन सकता हूं?

जवाबों:


2

ASCII numberहटा दिया गया है और यूनिकोड पाठ के साथ सही ढंग से काम नहीं करता है, उपयोग करें id of someCharacter:

set charNum to id of "בְּ" -- this return id of 3 characters because "בְּ" is a composed character
log charNum
set charNum to id of "ב"
log charNum
-->result: 
(*1489, 1456, 1468*)
(*1489*)

तो, मुझे नहीं पता कि शुद्ध AppleScript में यह कैसे करना है।


लेकिन, आप इसमें एक perl कमांड का उपयोग कर सकते हैं do shell script:

-- The text look not good in this code block, but it will be correct after the compilation of the script
set theString to "בְּרֵאשִׁ֖ית בָּרָ֣א אֱלֹהִ֑ים אֵ֥ת הַשָּׁמַ֖יִם וְאֵ֥ת הָאָֽרֶץ׃

וְהָאָ֗רֶץ הָיְתָ֥ה תֹ֙הוּ֙ וָבֹ֔הוּ וְחֹ֖שֶׁךְ עַל־פְּנֵ֣י תְה֑וֹם וְר֣וּחַ אֱלֹהִ֔ים מְרַחֶ֖פֶת עַל־פְּנֵ֥י הַמָּֽיִם׃

וַיֹּ֥אמֶר אֱלֹהִ֖ים יְהִ֣י א֑וֹר וַֽיְהִי־אֽוֹר׃

וַיַּ֧רְא אֱלֹהִ֛ים אֶת־הָא֖וֹר כִּי־ט֑וֹב וַיַּבְדֵּ֣ל אֱלֹהִ֔ים בֵּ֥ין הָא֖וֹר וּבֵ֥ין הַחֹֽשֶׁךְ׃

וַיִּקְרָ֨א אֱלֹהִ֤ים ׀ לָאוֹר֙ י֔וֹם וְלַחֹ֖שֶׁךְ קָ֣רָא לָ֑יְלָה וַֽיְהִי־עֶ֥רֶב וַֽיְהִי־בֹ֖קֶר י֥וֹם אֶחָֽד׃ (פ)"


return do shell script "perl -CSD -pe  'use utf8; s~\\p{NonspacingMark}~~og; s~־|׀~ ~g;  s~ +~ ~g;' <<< " & quoted form of theString

यहाँ प्रति लिपि का संक्षिप्त विवरण दिया गया है

  • -CSDविकल्प: उत्पादन और त्रुटि UTF-8 में हो जाएगा, इनपुट UTF-8 में माना जाता है
  • s~\\p{NonspacingMark}~~og : गैर रिक्ति अंक निकालें
  • s~־|׀~ ~g: सभी ־और ׀एक स्थान से बदलें
  • s~ +~ ~g : एक स्थान पर एक पंक्ति में कई स्थान बदलें

यदि आपका AppleScript फ़ाइल से पाठ पढ़ता है, तो आप फ़ाइल को पढ़ने के लिए पर्ल का उपयोग कर सकते हैं :

do shell script "perl -CSD -pe  'use utf8; s~\\p{NonspacingMark}~~og; s~־|׀~ ~g;  s~ +~ ~g;' < " & quoted form of posix path of pathOfTheTextFile

फ़ाइल की एन्कोडिंग utf8 होनी चाहिए।


एक अन्य उपाय कोको-एप्पलस्क्रिप्ट का उपयोग करना है :

        use framework "Foundation"
        use scripting additions
        -- The text look not good in this code block, but it will be correct after the compilation of the script
        set theString to "בְּרֵאשִׁ֖ית בָּרָ֣א אֱלֹהִ֑ים אֵ֥ת הַשָּׁמַ֖יִם וְאֵ֥ת הָאָֽרֶץ׃

וְהָאָ֗רֶץ הָיְתָ֥ה תֹ֙הוּ֙ וָבֹ֔הוּ וְחֹ֖שֶׁךְ עַל־פְּנֵ֣י תְה֑וֹם וְר֣וּחַ אֱלֹהִ֔ים מְרַחֶ֖פֶת עַל־פְּנֵ֥י הַמָּֽיִם׃

וַיֹּ֥אמֶר אֱלֹהִ֖ים יְהִ֣י א֑וֹר וַֽיְהִי־אֽוֹר׃

וַיַּ֧רְא אֱלֹהִ֛ים אֶת־הָא֖וֹר כִּי־ט֑וֹב וַיַּבְדֵּ֣ל אֱלֹהִ֔ים בֵּ֥ין הָא֖וֹר וּבֵ֥ין הַחֹֽשֶׁךְ׃

וַיִּקְרָ֨א אֱלֹהִ֤ים ׀ לָאוֹר֙ י֔וֹם וְלַחֹ֖שֶׁךְ קָ֣רָא לָ֑יְלָה וַֽיְהִי־עֶ֥רֶב וַֽיְהִי־בֹ֖קֶר י֥וֹם אֶחָֽד׃ (פ)"

        return stripString(theString)

        on stripString(t)
            set sourceString to current application's NSMutableString's stringWithString:t
            set myOpt to current application's NSRegularExpressionSearch
            set theSuccess to sourceString's applyTransform:(current application's NSStringTransformStripCombiningMarks) |reverse|:false range:(current application's NSMakeRange(0, (sourceString's |length|))) updatedRange:(missing value)
            if theSuccess then
                -- *** Replace all "־" and "׀" by a space, each character must be separated by a vertical bar character, e.g. "a|d|z"
                sourceString's replaceOccurrencesOfString:"־|׀" withString:" " options:myOpt range:(current application's NSMakeRange(0, (sourceString's |length|)))

                -- **** Replace multiple spaces in a row by one space
                sourceString's replaceOccurrencesOfString:" +" withString:" " options:myOpt range:(current application's NSMakeRange(0, (sourceString's |length|)))
                return sourceString as string -- convert the NSString object to an AppleScript's string
            end if
            return "" -- else, the transform was not applied
        end stripString

कमेंट्री के अनुसार:

एक छोटी बूंद के लिए, स्क्रिप्ट को on open handlerइस तरह की आवश्यकता होती है :

on open theseFiles
    repeat with f in theseFiles
        set cleanText to do shell script "perl -CSD -pe  'use utf8; s~\\p{NonspacingMark}~~og; s~־|׀~ ~g;  s~ +~ ~g;' " & quoted form of POSIX path of f
        -- do something with that cleanText
    end repeat
end open

यदि आप इन-प्लेस एडिटिंग करना चाहते हैं (पर्ल स्क्रिप्ट को -iविकल्प + की जरूरत है '.some name extension'):

यह प्रत्येक फ़ाइल का बैकअप बनाएगा (यह नाम के बाद " .bak " जोड़ें )

on open theseFiles
    repeat with f in theseFiles -- ***  create a backup and edit the file in-place ***
        do shell script "perl -i'.bak' -CSD -pe  'use utf8; s~\\p{NonspacingMark}~~og; s~־|׀~ ~g;  s~ +~ ~g;' " & quoted form of POSIX path of f
    end repeat
end open

यदि आप प्रत्येक फ़ाइल का बैकअप नहीं चाहते हैं (पर्ल स्क्रिप्ट को -iविकल्प + की जरूरत है ''), इस तरह से:

-- ***  edit the file in-place without backup***
do shell script "perl -i'' -CSD -pe  'use utf8; s~\\p{NonspacingMark}~~og; s~־|׀~ ~g;  s~ +~ ~g;' " & quoted form of POSIX path of f

किसी कारण से कोको हमेशा मेरी मशीन पर काम नहीं करता है, जो यह देखते हुए अजीब है कि यह नया मैकबुक प्रो है। क्या मुझे काम करने के लिए किसी प्रकार का एक्सटेंशन डाउनलोड करना होगा? किसी भी घटना में, अप्प्लीस्क्रिप्ट को बैश कॉल पर्ल बना देता है, जबकि थोड़ा जटिल, पूरी तरह से काम करता है, इसलिए मैंने आपको अपना चेकमार्क दिया। धन्यवाद! एक आखिरी सवाल: अगर मैं एक बूंद के रूप में दूसरे पर्ल को बचाता हूं, तो क्या मैं बस उस पर एक .txt फ़ाइल छोड़ सकता हूं, और यह उस फ़ाइल में मेरे लिए इसे पार्स कर देगा? क्या returnफ़ंक्शन फ़ाइलों को संपादित करने की अनुमति देता है?
DonielF

इस कोड को MacOS 10.11.xया बाद में (बिना किसी चीज की आवश्यकता के) काम करना चाहिए । यदि यह काम नहीं करता है, तो यह एक या अधिक कारकों पर निर्भर हो सकता है। यह पता लगाने के लिए कोड डीबगिंग की आवश्यकता होती है। लेकिन अगर पर्ल स्क्रिप्ट काम करती है, तो कोको-एप्सस्क्रिप्ट के साथ जारी रखने की आवश्यकता नहीं है । मैंने दूसरे प्रश्न के लिए अपना उत्तर अपडेट किया।
jackjr300
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.