হিব্রু অ্যাকসেন্ট মার্কস স্ট্রিপ কিভাবে


17

হিব্রু অ্যাকসেন্ট মার্কস স্ট্রিপ করার জন্য আমার একটি চার এনকোডিং ট্রিক দরকার।

আগে নমুনা

בָּרָ֣א אֱלֹהִ֑ים אֵ֥ת הַשָּׁמַ֖יִם וְאֵ֥ת הָאָֽרֶץ

পরে নমুনা

ברא אלהים את השמים ואת הארץ

উত্তর:


26

কৌতুক এখানে উপলব্ধি করা যে, এই অক্ষর আছে যা আপনি "কথা" দিয়ে প্রশ্ন মধ্যে দেখতে সত্যিই না হয় অক্ষর (যেমন "এই নয়Droidsযে অক্ষরগুলি আপনি অনুসন্ধান করছেন ";-))" "উচ্চারণ" হ'ল বিভিন্ন ধরণের স্বরলিপিগুলি যেমন:

  • স্বর (লাইন এবং বিন্দু যা সাধারণত অক্ষরের অধীনে থাকে):

    বেস লেটার "ה" = "এইচ"; "הֶ" = "হি" এবং "הָ" = "হাহ"

  • উচ্চারণ (বিন্দুগুলি যা সাধারণত অক্ষরের অভ্যন্তরে বা উপরে থাকে):

    "בּ" = "বি" বনাম "ב" = "ভি", বা "שׂ" = "এস" বনাম "שׁ" = "শ"

  • যতিচিহ্নসিন্নিবেশ

  • ক্যান্টিলেশন (এটি কীভাবে গাইতে হবে)

প্রকৃত হিব্রু অক্ষরগুলি হ'ল স্ট্রিপড ডাউন সংস্করণে (যেমন এখানে অনুরোধ করা হচ্ছে তার শেষ ফলাফল)। আমরা এখানে "অ্যাকসেন্ট" হিসাবে উল্লেখ করছি যা ডায়াক্রিটিকাল চিহ্ন হিসাবে পরিচিত। হিব্রু ডায়রিটিক্স সম্পর্কিত উইকিপিডিয়া নিবন্ধে এই চিত্রগুলি সম্পর্কে নীচের চিত্র এবং ক্যাপশন সহ অনেকগুলি ভাল তথ্য রয়েছে:

জেনারেল 1: 9 এবং saidশ্বর বলেছিলেন, "জলে জড়ো হোক"
জেনারেল 1: 9 এবং saidশ্বর বলেছিলেন, "জল জড়ো হোক"। কালো বর্ণের বর্ণগুলি, লাল রঙে ইঙ্গিত করছে, নীল রঙে ক্যান্টিলেশন

এই বেস অক্ষরগুলি থেকে প্রথম লাইনটি (স্বর ইত্যাদির সাহায্যে) কী দেখায় তা এক বা একাধিক "উচ্চারণ" যুক্ত করার বিষয়। ইউনিকোড (এসকিউএল সার্ভারে ইউটিএফ -16, যদিও ডিফল্ট ব্যাখ্যা কেবলমাত্র ইউসিএস -2 / বেসিক বহুভাষিক প্লেন (বিএমপি) কোড পয়েন্টগুলি পরিচালনা করে কিছু সংক্ষিপ্ত অক্ষরগুলি যখন তাদের সংলগ্ন হয় তখন একটি অন্য অ-ওভারলে চরিত্রকে ওভারলে করার অনুমতি দেয়। এগুলি সম্মিলিত অক্ষর হিসাবে পরিচিত ।

অর্থ:

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এগুলি দেখতে আপনি উপরেরটি চালাতে পারেন ):

מ থেকে Rem অপসারণ নীচে দুটি অক্ষর ফেলেছে: ַ֖

সুতরাং, আমাদের প্রতিটি স্বতন্ত্র কোড-পয়েন্টটি বের করতে হবে যা এই "অতিরিক্ত" সংমিশ্রিত অক্ষরের মধ্যে একটি (এখানে পাওয়া যায়: 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" হবে যদিও এটি শব্দের সরাসরি অনুবাদ নয়, কেবল তাওরাত / বাইবেলের প্রথম বইয়ের নাম; সরাসরি অনুবাদটি "শুরুতে"):

    God'sশ্বরের আকাশ ও পৃথিবী সৃষ্টির শুরুতে

  • 2015-01-19: আমি কিছু দুর্দান্ত সংস্থান পেয়েছি যা সম্মিলন অক্ষর এবং হিব্রু চরিত্র সেট উভয়ের ব্যাখ্যা করে:


ধন্যবাদ ধন্যবাদ! (আবার :)। দেখা যাক কতদিন আপনার মন্তব্য এই সময় ;-D প্রাণে বেঁচে যান (আমাদের প্রেতাত্মা পরিষ্করণ "প্রক্রিয়া" নোট: যে কোন অভদ্র বা আছে কথা ছিলো না প্রভাব বিদ্রুপপূর্ণ, এবং এই স্মিত বিড়াল 😺 করে বর্ণবলয় সঙ্গে এই স্মাইলি যে 😇 প্রমাণ)
সলোমন রুটজকি 22

1
এবং আবার আমি আপনার উত্তরগুলি থেকে অপ্রত্যাশিত কিছু শিখেছি। নিস!
ম্যাক্স ভার্নন

1
কি দারুন! এনকোডিং পরিচালনা করার দুর্দান্ত বর্ণনা সহ একটি চমৎকার ভাষাতাত্ত্বিক উত্তর ! ধন্যবাদ, সলোমন!
মাইক উইলিয়ামসন

1

এটি একটি আকর্ষণীয় সমস্যা এবং আমি প্রথম ধরণের জাপানি চরিত্রগুলির সাথে কাজ করার কিছুক্ষণ আগে মুখোমুখি হয়েছি। আমি আপনার সমস্যার চরিত্রগুলি সনাক্ত করার চেষ্টা করে একটি ইটের প্রাচীরের একটি অংশটি আঘাত করেছি, যদিও আমি আশা করি এটি আপনাকে খুঁজে পেয়ে কোথাও যেতে পারে।

প্রথমে আমি সমস্ত এনসিএইচআর একটি টেবিলে পেয়েছি:

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; }

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.