Ведение строк с неанглийскими словами в Pandas или SQL - PullRequest
0 голосов
/ 24 октября 2018

Мой фрейм данных выглядит примерно так на SQL (я могу либо написать свой запрос прямо там, либо импортировать его в Pandas, а затем сделать):

videoId    videoName

12234      Racing through the valleys
14533      Character Loose
14456      सूरमा धड़क 
17889      हिचकी
16612      মন তোমাকে ছুঁয়ে দিলাম
15580      ঈশানকোণে বিষন্নতায়

Так что мой аспирационный фрейм данных будет выглядеть примерно так:

videoId    videoName

 14456      सूरमा धड़क 
 17889      हिचकी
 16612      মন তোমাকে ছুঁয়ে দিলাম
 15580      ঈশানকোণে বিষন্নতায়

Я хочу сохранить строки со словами "хинди" и "бенгали".Есть ли в любом случае, я могу сделать это, прямо из SQL или путем импорта в Pandas, в любом случае будет работать.

Тогда я хочу провести различие между «хинди» и «бенгали».Два разных фрейма данных, например:

df_hindi:

    videoId     videoName

     14456      सूरमा धड़क 
     17889      हिचकी

df_bengali:

videoId    videoName

16612      মন তোমাকে ছুঁয়ে দিলাম
15580      ঈশানকোণে বিষন্নতায়

Как я уже говорил, любой метод будет работать, кроме Pandas и Pythonболее предпочтительны.

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

WHERE videoName REGEXP '^(..)*E0A[45]' найдет имена в тексте на деванагари (хинди).
WHERE videoName REGEXP '^(..)*E0A[67]' для бенгальского
WHERE videoName REGEXP '^(..)*E0A[AB]' для гуджарати
WHERE videoName NOT REGEXP '^(..)*E0' (приблизительно) позволит избежать любых индийских языков.

Выбранные другие языки могут быть выведены из:

| DEVANAGARI LETTER                | E0A485 | E0A4B9 |
| DEVANAGARI SIGN                  | E0A4BD | E0A4BD |
| DEVANAGARI OM                    | E0A590 | E0A590 |
| DEVANAGARI LETTER                | E0A598 | E0A5A1 |
| DEVANAGARI DIGIT                 | E0A5A6 | E0A5AF |
| BENGALI LETTER                   | E0A685 | E0A6B9 |
| BENGALI LETTER                   | E0A79C | E0A7A1 |
| BENGALI DIGIT                    | E0A7A6 | E0A7AF |
| BENGALI LETTER                   | E0A7B0 | E0A7B1 |
| GURMUKHI LETTER                  | E0A885 | E0A8B9 |
| GURMUKHI LETTER                  | E0A999 | E0A99E |
| GURMUKHI DIGIT                   | E0A9A6 | E0A9AF |
| GURMUKHI IRI                     | E0A9B2 | E0A9B4 |
| GUJARATI LETTER                  | E0AA85 | E0AAB9 |
| GUJARATI SIGN                    | E0AABD | E0AABD |
| GUJARATI OM                      | E0AB90 | E0ABA0 |
| GUJARATI DIGIT                   | E0ABA6 | E0ABAF |
| ORIYA LETTER                     | E0AC85 | E0ACB9 |
| ORIYA SIGN                       | E0ACBD | E0ACBD |
| ORIYA LETTER                     | E0AD9C | E0ADA1 |
| ORIYA DIGIT                      | E0ADA6 | E0ADAF |
| TAMIL SIGN                       | E0AE83 | E0AEB9 |
| TAMIL DIGIT                      | E0AFA7 | E0AFAF |
| TELUGU LETTER                    | E0B085 | E0B0B9 |
| TELUGU LETTER                    | E0B1A0 | E0B1A1 |
| TELUGU DIGIT                     | E0B1A6 | E0B1AF |
| KANNADA LETTER                   | E0B285 | E0B2B9 |
| KANNADA LETTER                   | E0B39E | E0B3A1 |
| KANNADA DIGIT                    | E0B3A6 | E0B3AF |
| MALAYALAM LETTER                 | E0B485 | E0B4B9 |
| MALAYALAM LETTER                 | E0B5A0 | E0B5A1 |
| MALAYALAM DIGIT                  | E0B5A6 | E0B5AF |
| SINHALA LETTER                   | E0B685 | E0B786 |
| THAI CHARACTER                   | E0B881 | E0B8B0 |
| THAI CHARACTER                   | E0B8B2 | E0B8B3 |
| THAI CHARACTER                   | E0B980 | E0B986 |
| THAI DIGIT                       | E0B990 | E0B999 |
| LAO LETTER                       | E0BA81 | E0BAB0 |
| LAO VOWEL                        | E0BAB2 | E0BAB3 |
| LAO SEMIVOWEL                    | E0BABD | E0BB86 |
| LAO DIGIT                        | E0BB90 | E0BB99 |
| LAO HO                           | E0BB9C | E0BC80 |
| TIBETAN DIGIT                    | E0BCA0 | E0BCA9 |
| TIBETAN LETTER                   | E0BD80 | E0BDAA |
| TIBETAN SIGN                     | E0BE88 | E0BE8B |

Или

E0A4xx  DEVANAGARI  ऀँंःऄअआइईउऊऋऌऍऎएऐऑऒओऔकखगघङचछजझञटठडढणतथदधनऩपफबभमयरऱलळऴवशषसह़ऽाि
E0A5xx  ीुूृॄॅॆेैॉॊोौ्ॎॐ॒॑॓॔ॕक़ख़ग़ज़ड़ढ़फ़य़ॠॡॢॣ।॥०१२३४५६७८९॰ॱॲॹॺॻॼॽॾॿ
E0A6xx  BENGALI     ঁংঃঅআইঈউঊঋঌএঐওঔকখগঘঙচছজঝঞটঠডঢণতথদধনপফবভমযরলশষসহ়ঽাি
E0A7xx  ীুূৃৄেৈোৌ্ৎৗড়ঢ়য়ৠৡৢৣ০১২৩৪৫৬৭৮৯ৰৱ৲৳৴৵৶৷৸৹৺৻
E0A8xx  GURMUKHI    ਁਂਃਅਆਇਈਉਊਏਐਓਔਕਖਗਘਙਚਛਜਝਞਟਠਡਢਣਤਥਦਧਨਪਫਬਭਮਯਰਲਲ਼ਵਸ਼ਸਹ਼ਾਿ
E0A9xx  ੀੁੂੇੈੋੌ੍ੑਖ਼ਗ਼ਜ਼ੜਫ਼੦੧੨੩੪੫੬੭੮੯ੰੱੲੳੴੵ
E0AAxx  GUJARATI    ઁંઃઅઆઇઈઉઊઋઌઍએઐઑઓઔકખગઘઙચછજઝઞટઠડઢણતથદધનપફબભમયરલળવશષસહ઼ઽાિ
E0ABxx  ીુૂૃૄૅેૈૉોૌ્ૐૠૡૢૣ૦૧૨૩૪૫૬૭૮૯૱
E0ACxx  ORIYA   ଁଂଃଅଆଇଈଉଊଋଌଏଐଓଔକଖଗଘଙଚଛଜଝଞଟଠଡଢଣତଥଦଧନପଫବଭମଯରଲଳଵଶଷସହ଼ଽାି
E0ADxx  ୀୁୂୃୄେୈୋୌ୍ୖୗଡ଼ଢ଼ୟୠୡୢୣ୦୧୨୩୪୫୬୭୮୯୰ୱ
E0AExx  TAMIL   ஂஃஅஆஇஈஉஊஎஏஐஒஓஔகஙசஜஞடணதநனபமயரறலளழவஶஷஸஹாி
E0AFxx  ீுூெேைொோௌ்ௐௗ௦௧௨௩௪௫௬௭௮௯௰௱௲௳௴௵௶௷௸௹௺
E0B0xx  TELUGU  ఁంఃఅఆఇఈఉఊఋఌఎఏఐఒఓఔకఖగఘఙచఛజఝఞటఠడఢణతథదధనపఫబభమయరఱలళవశషసహఽాి
E0B1xx  ీుూృౄెేైొోౌ్ౕౖౘౙౠౡౢౣ౦౧౨౩౪౫౬౭౮౯౸౹౺౻౼౽౾౿
E0B2xx  KANNADA     ಂಃಅಆಇಈಉಊಋಌಎಏಐಒಓಔಕಖಗಘಙಚಛಜಝಞಟಠಡಢಣತಥದಧನಪಫಬಭಮಯರಱಲಳವಶಷಸಹ಼ಽಾಿ
E0B3xx  ೀುೂೃೄೆೇೈೊೋೌ್ೕೖೞೠೡೢೣ೦೧೨೩೪೫೬೭೮೯ೱೲ
E0B4xx  MALAYALAM   ംഃഅആഇഈഉഊഋഌഎഏഐഒഓഔകഖഗഘങചഛജഝഞടഠഡഢണതഥദധനപഫബഭമയരറലളഴവശഷസഹഽാി
E0B5xx  ീുൂൃൄെേൈൊോൌ്ൗൠൡൢൣ൦൧൨൩൪൫൬൭൮൯൰൱൲൳൴൵൹ൺൻർൽൾൿ
E0B6xx  SINHALA     ංඃඅආඇඈඉඊඋඌඍඎඏඐඑඒඓඔඕඖකඛගඝඞඟචඡජඣඤඥඦටඨඩඪණඬතථදධනඳපඵබභමඹයරල
E0B7xx  වශෂසහළෆ්ාැෑිීුූෘෙේෛොෝෞෟෲෳ෴
E0B8xx  THAI    กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู฿
E0B9xx  เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛
E0BAxx  LAO     ກຂຄງຈຊຍດຕຖທນບປຜຝພຟມຢຣລວສຫອຮຯະັາຳິີຶືຸູົຼຽ
E0BBxx  ເແໂໃໄໆ່້໊໋໌ໍ໐໑໒໓໔໕໖໗໘໙ໜໝ
E0BCxx  TIBETAN     ༀ༁༂༃༄༅༆༇༈༉༊་༌།༎༏༐༑༒༓༔༕༖༗༘༙༚༛༜༝༞༟༠༡༢༣༤༥༦༧༨༩༪༫༬༭༮༯༰༱༲༳༴༵༶༷༸༹༺༻༼༽༾༿
E0BDxx  ཀཁགགྷངཅཆཇཉཊཋཌཌྷཎཏཐདདྷནཔཕབབྷམཙཚཛཛྷཝཞཟའཡརལཤཥསཧཨཀྵཪཫཬཱཱཱིིུུྲྀཷླྀཹེཻོཽཾཿ
E0BExx  ྄ཱྀྀྂྃ྅྆྇ྈྉྊྋྐྑྒྒྷྔྕྖྗྙྚྛྜྜྷྞྟྠྡྡྷྣྤྥྦྦྷྨྩྪྫྫྷྭྮྯྰྱྲླྴྵྶྷྸྐྵྺྻྼ྾྿
E0BFxx  ࿀࿁࿂࿃࿄࿅࿆࿇࿈࿉࿊࿋࿌࿎࿏࿐࿑࿒࿓࿔࿕࿖࿗࿘
0 голосов
/ 24 октября 2018

Поиск диапазонов шрифтов , хинди (деванагари) кажется U + 0900 – U + 097F и бенгальский U + 0980 – U + 09FF .

chars_hindi = [chr(c) for c in range(0x0900, 0x097f)]
chars_bengali = [chr(c) for c in range(0x0980, 0x09ff)]

Фильтрация фреймов данных с помощью регулярного выражения с использованием альтернирования дает желаемый результат:

df_hindi = df[df.videoName.str.contains('|'.join(chars_hindi))]
df_bengali = df[df.videoName.str.contains('|'.join(chars_bengali))]

Имейте в виду, что это работает только при условиипредположение, что каждый videoName содержит только или хинди или деванагари.Если ваши данные не соответствуют этому предположению, вам придется решить свою проблему другим способом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...