कैसे हिब्रू उच्चारण निशान पट्टी करने के लिए


17

मुझे स्ट्रिप हिब्रू एक्सेंट मार्क्स के लिए चार एन्कोडिंग ट्रिक चाहिए।

पहले नमूना

अंग्रेजी में अंग्रेजी

बाद नमूना

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

जवाबों:


26

यहाँ ट्रिक यह महसूस करना है कि इन अक्षरों को जो आप "एक्सेंट" के साथ प्रश्न में देखते हैं, वास्तव में अक्षर नहीं हैं (यानी "ये नहीं हैं")ड्रौयडवर्ण जो आप ";-)) की तलाश में हैं।" लहजे "विभिन्न प्रकार के नोटेशन हैं जो चीजों को इंगित करते हैं:

  • स्वर (रेखाएँ और बिंदु जो आमतौर पर अक्षरों के नीचे होते हैं):

    आधार पत्र "ה" = "h"; "ה" "=" हेह "और" ה = "=" हह "

  • उच्चारण (डॉट्स जो आमतौर पर अक्षरों के अंदर या ऊपर होते हैं):

    "בב" = "b" बनाम "ב" = "v", या "ּ" = "s" बनाम "sh" = "sh"

  • विराम चिह्न

  • छावनी (इसे कैसे गाया जाना चाहिए)

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

जनरल 1: 9 और भगवान ने कहा, "पानी इकट्ठा हो"
जनरल 1: 9 और भगवान ने कहा, "पानी इकट्ठा हो"। काले रंग में अक्षर, लाल रंग में इंगित, नीले रंग में रंगा हुआ

उन आधार वर्णों से प्राप्त करना जो पहली पंक्ति (स्वर, आदि के साथ) दिखाता है, एक या अधिक "उच्चारण" जोड़ने की बात है। SQL सर्वर में यूनिकोड (UTF-16, हालाँकि डिफ़ॉल्ट व्याख्या केवल UCS-2 / Basic बहुभाषी प्लेन (BMP) कोड पॉइंट्स को संभालती है) कुछ वर्णों को उनके समीप होने पर किसी अन्य गैर-ओवरले वर्ण को ओवरले करने की अनुमति देता है। इन्हें कॉम्बिंग कैरेक्टर के रूप में जाना जाता है ।

अर्थ:

SELECT DATALENGTH(N'מַ֖'); -- character taken from original given text

यह दिखाता है:

6

नहीं 2ज्यादातर लोगों के लिए एक एकल, डबल-बाइट वर्ण देखने से उम्मीद करेंगे के रूप में। तो शायद हम यह जानने की कोशिश करें कि ऐसा करने से क्या चरित्र होता है:

SELECT UNICODE(N'מַ֖');

कौन सा रिटर्न:

1502

बेशक, UNICODEऔर ASCIIफ़ंक्शंस केवल INTउस स्ट्रिंग के पहले वर्ण का मान लौटाते हैं जो उन्हें दिया जाता है। लेकिन 1502 का मान केवल 2 बाइट्स को कवर करता है, जो कि 4 बाइट्स को बेहिसाब छोड़ देता है। उसी हिब्रू "चरित्र" के द्विआधारी / हेक्स मूल्यों को देखते हुए:

SELECT NCHAR(1502), CONVERT(BINARY(2), UNICODE(N'מַ֖')), CONVERT(VARBINARY(10), N'מַ֖');

हमें मिला:

מ
0x05DE  0xDE05B7059605

अब, 0x05DE 1502 का हेक्स प्रतिनिधित्व है, और 1502 केवल " विन " है। अगले भाग को तीन 2-बाइट सेट में अलग किया जा सकता है: DE05 B705 9605 । अब, यूनिकोड स्ट्रिंग मान लिटिल एंडियन में संग्रहीत हैं, जिसका अर्थ है कि बाइट-ऑर्डर उलटा है। यदि हम उन तीन सेटों में से प्रत्येक को बदलते हैं जो हमें प्राप्त होते हैं:

05DE (आधार चरित्र) 05B7 0596 (4 बाइट्स के लिए बेहिसाब)।

ठीक है। तो क्या होगा अगर हम उस आधार चरित्र को हटा दें?

SELECT REPLACE(N'מַ֖' COLLATE Hebrew_BIN2, NCHAR(1502) COLLATE Hebrew_BIN2, '');

वह दो शेष वर्ण लौटाता है (यहाँ देखना आसान नहीं है इसलिए मैंने फ़ॉन्ट आकार बढ़ाने के लिए निम्नलिखित पंक्ति को शीर्ष लेख बनाया है; आप REPLACEउन्हें देखने के लिए ऊपर भी चला सकते हैं):

מַ֖ से the को हटाने से तल पर दो वर्ण निकलते हैं: the

इसलिए, हमें प्रत्येक व्यक्तिगत कोड-पॉइंट को अलग करने की आवश्यकता है जो कि इन "अतिरिक्त" संयोजन वर्णों में से एक है (यहां पाया गया: http://unicode-table.com/en/search/?q=hebrew ) और यह हमें छोड़ देगा आधार पात्रों के साथ। हम ऐसा कर सकते हैं:

CREATE FUNCTION dbo.RemoveHebrewAccents (@txeTwerbeH NVARCHAR(MAX))
RETURNS NVARCHAR(MAX)
WITH SCHEMABINDING
AS
BEGIN

  WITH base (dummy) AS
  (
    SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL 
    SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1 UNION ALL SELECT 1
  ), nums AS
  (
    -- we will want to generate code points 1425 - 1479
    SELECT TOP (55) ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS [Num]
    FROM   base b1
    CROSS JOIN base b2
  )
  SELECT @txeTwerbeH = REPLACE(
                               @txeTwerbeH COLLATE Hebrew_BIN2,
                               NCHAR(1424 + nums.[Num]) COLLATE Hebrew_BIN2,
                               ''
                              )
  FROM   nums;

  RETURN @txeTwerbeH;
END;

और फिर हम मूल पाठ के साथ इसका परीक्षण कर सकते हैं:

DECLARE @Hebrew NVARCHAR(200) = N'בְּרֵאשִׁ֖ית בָּרָ֣א אֱלֹהִ֑ים אֵ֥ת הַשָּׁמַ֖יִם וְאֵ֥ת הָאָֽרֶץ';

SELECT dbo.RemoveHebrewAccents(@Hebrew);

यह दिखाता है:

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


अतिरिक्त नोट्स:

  • तकनीकी रूप से, 64298 और 64334 के बीच कोड-बिंदुओं का एक सेट है जो चरित्र में निर्मित कुछ स्वर और उच्चारण "उच्चारण" है। यदि उन लोगों को संभालने की आवश्यकता है, तो उन पात्रों का एक सरल प्रतिस्थापन करने के लिए फ़ंक्शन का दूसरा चरण हो सकता है।

  • ऐसा लगता है कि ये उच्चारण, विराम चिह्न आदि कोड-पॉइंट केवल एक द्विआधारी टकराव का उपयोग करते समय मेल खाते हैं। यहां तक ​​कि उपयोग करना Hebrew_100_CS_AS_KS_WS_SCभी उनसे मेल नहीं खाता था। लेकिन निम्नलिखित काम किया है: Hebrew_BIN, Hebrew_BIN2, Latin1_General_BIN, और Latin1_General_BIN2। फ़ंक्शन में मैंने उपयोग करना समाप्त कर दिया Hebrew_BIN2। कृपया ध्यान दें कि जब बाइनरी कॉलेशन का उपयोग किया जाता है, जब तक कि आपको पुराने _BINकॉलेशन का उपयोग करने की कोई विशिष्ट आवश्यकता नहीं होती है , तो आपको केवल नए _BIN2कॉलेशन का उपयोग करना चाहिए ।

  • जो कोई जिज्ञासु है, उसके लिए हिब्रू नमूना पाठ वास्तव में बेरीशिस 1: 1 है (यह भी दाईं ओर पहला शब्द है क्योंकि हिब्रू को दाएं-बाएं पढ़ा जाता है; अंग्रेजी में यह "उत्पत्ति 1: 1" होगा) यह शब्द का सीधा अनुवाद नहीं है, बस टोरा / बाइबिल की पहली पुस्तक का नाम है; सीधा अनुवाद "शुरुआत में है"):

    ईश्वर की शुरुआत में आकाश और पृथ्वी का निर्माण

  • २०१५-०१-१९: मुझे कुछ महान संसाधन मिले, जो दोनों वर्णों और हिब्रू वर्ण सेट की व्याख्या करते हैं:


@ किन धन्यवाद! (फिर :)। आइए देखते हैं कि आपकी टिप्पणी इस समय कितनी देर तक जीवित रहती है? - डी (हमारी भूत सफाई पर ध्यान दें "प्रक्रिया": जिसका मतलब किसी भी असभ्य या साँप के निहितार्थ नहीं थे, और प्रभामंडल के साथ यह स्माइली साबित करती है कि does जैसा कि यह मुस्कुराता है बिल्ली comment)
सोलोमन रुट्ज़की 22

1
और फिर से मैं आपके उत्तरों से कुछ अप्रत्याशित सीखता हूं। अच्छा!
मैक्स वर्नोन

1
वाह! एन्कोडिंग को संभालने के एक उत्कृष्ट विवरण के साथ एक अच्छा भाषाविज्ञान का उत्तर दिया गया ! धन्यवाद, सुलैमान!
माइक विलियमसन

1

यह एक दिलचस्प समस्या है, और एक मैं एक तरह से जापानी पात्रों के साथ काम करने का सामना करना पड़ा। मैंने आपकी समस्या के पात्रों का पता लगाने की कोशिश में एक ईंट की दीवार से टकराया, हालांकि मुझे आशा है कि यह आपको उन्हें खोजने के साथ कहीं जा रहा है।

पहले मुझे सभी NCHAR एक टेबल में मिले:

SET NOCOUNT ON  

DECLARE @cnt INT = 1
DECLARE @sqlcmd NVARCHAR(512) = ''

CREATE TABLE #CHARS (
[CharOrder] INT IDENTITY(1,1) PRIMARY KEY CLUSTERED,
[Result] NVARCHAR(4) 
)

WHILE @cnt < 65536
BEGIN

SELECT @sqlcmd = '
INSERT #CHARS
    ([Result] )
SELECT NCHAR(' + CAST(@cnt AS NVARCHAR) + ')
'

EXEC sys.sp_executesql @sqlcmd

SET @cnt +=1 
END

तब मैं गैर-उच्चारण वर्णों में से एक स्थित करता हूं:

SELECT  c.CharOrder, c.Result
FROM    #CHARS AS c
WHERE c.Result = N'ר'
ORDER BY c.CharOrder

तब मैं चार वर्णों की श्रेणी में आता हूं जो हिब्रू वर्ण हैं:

SELECT  c.CharOrder, c.Result
FROM    #CHARS AS c
WHERE c.CharOrder >= 1488
AND c.CharOrder < 1523
ORDER BY c.CharOrder

लेकिन आप चाहते हैं कि उच्चारण वर्णों को खोजने की कोशिश कर रहे हैं, वे कोड 8501 पर एक हिट को छोड़कर, दिखाई नहीं देते हैं।

SELECT  c.CharOrder ,
        c.Result
FROM    #CHARS AS c
WHERE   c.Result IN ( N'רֵ', N'א', N'שִׁ֖', N'י', N'ת', N'בְּ', N'בָּ', N'רָ֣',
                      N'א', N'אֱ', N'לֹ', N'הִ֑', N'י', N'ם', N'אֵ֥', N'ת',
                      N'הַ', N'שָּׁ', N'מַ֖', N'יִ', N'ם', N'וְ', N'אֵ֥', N'ת',
                      N'הָ', N'אָֽ', N'רֶ', N'ץ' )
ORDER BY c.CharOrder

तो बस आसपास के पात्रों को देखकर, मैं वास्तव में आपके पाठ के लिए किसी अन्य मैच की पहचान नहीं कर सकता।

SELECT  c.CharOrder, c.Result
FROM    #CHARS AS c
WHERE c.CharOrder >= 8499
AND c.CharOrder < 8539
ORDER BY c.CharOrder

उनमें से बहुत से जो कुछ भी उन छोटी छोटी आयतों के रूप में फेंक दिया लगता है।

फिर, क्षमा करें, यह कोई समाधान नहीं है, लेकिन आशा है कि यह मदद करता है।


1
पुन: "आप चाहते हैं कि उच्चारण वर्णों को खोजने की कोशिश कर रहे हैं, वे दिखाई नहीं देते हैं", ऐसा इसलिए है क्योंकि वे ;-) नहीं हैं। मैं अपने उत्तर में और अधिक विस्तार से समझाता हूं, लेकिन मूल रूप से यह एक या दो ओवरले पात्रों के साथ एक आधार चरित्र है जो आधार चरित्र के समान दृश्यमान स्थिति लेता है।
सुलैमान रुट्ज़की

3
यह वास्तव में अच्छा है। मैंने कभी नहीं सोचा होगा कि वे निशान पात्रों से अलग थे। धन्यवाद।
एरिक डार्लिंग

1

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

मैं किसी भी अंतर्निहित कार्यक्षमता का उपयोग उच्चारण पात्रों को गैर-उच्चारण समकक्ष के रूप में परिवर्तित करने के लिए नहीं करता हूं। इसके बजाय मैं एक लुकअप सूची बनाता हूं, जिसे आप आवश्यक रूपांतरणों के साथ आबाद करेंगे। आपको nvarcharअपने अनुवादों को N'x'निश्चित रूप से उपयोग और परिभाषित करना होगा ।

पंक्ति समवर्ती टिप के लिए इस पोस्ट के लिए धन्यवाद ।

drop table #Numbers;

select
    *
into #Numbers
from 
    (
    select *
    from (values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11)) as T(N)
    ) as xx;

drop table #Lookups;

select
    *
into #Lookups
from 
    (
    select *
    from (values ('a','m'),('b','n'),('c','o'),('d','p'),('e','q'),('m','z')) as T(CharFrom,CharTo)
    ) as xx;


drop table #Inputs;

select
    *
into #Inputs
from 
    (
    select *
    from (values ('abcdefghi')
                ,('abtcd')
        ) as T(Word)
    ) as xx;


select
     ix.Word as Original
    ,(
    select
        Coalesce(l.CharTo, SUBSTRING(i.word, n.N, 1)) -- do not alias
    from #Inputs as i
    cross apply #Numbers as n
    left join #Lookups as l
        on l.CharFrom = SUBSTRING(i.word, n.N, 1)
    where n.N <= LEN(i.Word)
    and i.Word = ix.Word
    for xml path ('')
    ) as Substituted
from #Inputs as ix;

माइकल, हिब्रू वास्तव में इस तरह से काम नहीं करता है। ये वास्तव में "उच्चारण वर्ण" उसी तरह से इन हैं कि नहीं कर रहे हैं: Ü ö ò ô å Ä Å É ï। इसलिए, एक मानक अनुवाद / मानचित्रण विधि काम नहीं करेगी।
सोलोमन रटज़स्की

0

अगर भविष्य में कोई चाहता है तो यहां काम किया जाता है।

function accentHebrewToCleanHebrew($accentHebrew){ //Strip Extras $search = array("&#1425;", "&#1426;", "&#1427;", "&#1428;", "&#1429;", "&#1430;", "&#1431;", "&#1432;", "&#1433;", "&#1434;", "&#1435;", "&#1436;", "&#1437;", "&#1438;", "&#1439;", "&#1440;", "&#1441;", "&#1442;", "&#1443;", "&#1444;", "&#1445;", "&#1446;", "&#1447;", "&#1448;", "&#1449;", "&#1450;", "&#1451;", "&#1452;", "&#1453;", "&#1454;", "&#1455;", "&#1456;", "&#1457;", "&#1458;", "&#1459;", "&#1460;", "&#1461;", "&#1462;", "&#1463;", "&#1464;", "&#1465;", "&#1466;", "&#1467;", "&#1468;", "&#1469;", "&#1470;", "&#1471;", "&#1472;", "&#1473;", "&#1474;", "&#1475;", "&#1476;", "&#1477;", "&#1478;", "&#1479;"); $replace = ""; $cleanHebrew = str_replace($search, $replace, $accentHebrew); return $cleanHebrew; }

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.