পাইথন: ভাষা কীভাবে নির্ধারণ করবেন?


89

আমি এটি পেতে চাই:

Input text: "ру́сский язы́к"
Output text: "Russian" 

Input text: "中文"
Output text: "Chinese" 

Input text: "にほんご"
Output text: "Japanese" 

Input text: "العَرَبِيَّة"
Output text: "Arabic"

অজগরে কীভাবে করব? ধন্যবাদ


4
তুমি কি চেষ্টা করেছ?
রাসকায়ু

4
এই সাহায্য করতে পারে stackoverflow.com/questions/4545977/...
Sardorbek Imomaliev

সুন্দরভাবে এখানে সংক্ষিপ্ত বিবরণ stackoverflow.com/a/48436520/2063605
এসএনএ

সম্ভবত আরও দেখুন github.com/topics/language-
ઓળખાણ?

উত্তর:


57

আপনি ল্যাংডেটেক্টে একবার দেখেছেন ?

from langdetect import detect

lang = detect("Ein, zwei, drei, vier")

print lang
#output: de

28
খুব নির্ভুল নয় - ro(রোমানিয়ান) হিসাবে পাঠ্য 'শারীরবৃত্তীয় কাঠামো'র ভাষা সনাক্ত করে । এই জাতীয় ক্ষেত্রে একাধিক ভাষার আউটপুট প্রয়োজন। বহুগ্লোট আরও ভাল পারফর্ম করে।
ইউরি পেট্রোভস্কি

4
আকর্ষণীয়, একই উদাহরণের জন্য langdetectবিভিন্ন ভাষা নির্ধারণ করতে পারে :-)
ডেনিস কুজিন

4
কিছু কারণে, langdetect ত্রুটি, আমি পাইথন 3.6 ব্যবহার করছি দেওয়া হয়
কটাক্ষ

কখনো শুনেছেন আইন !!!
টিমো

200
  1. পাঠ্যব্লব । এনএলটিকে প্যাকেজ দরকার, গুগল ব্যবহার করে।

    from textblob import TextBlob
    b = TextBlob("bonjour")
    b.detect_language()
    

    pip install textblob

  2. বহুগ্লোট । অদ্ভুত এবং কিছু আরকেন গ্রন্থাগার প্রয়োজন, এটি উইন্ডোজের পক্ষে কাজ করার সম্ভাবনা নয় । (Windows এর জন্য, একটি উপযুক্ত সংস্করণ পেতে PyICU , Morfessor এবং PyCLD2 থেকে এখানে হয় তাহলে, শুধুমাত্র pip install downloaded_wheel.whl।) মিশ্র ভাষার সঙ্গে গ্রন্থে সনাক্ত করতে সক্ষম।

    from polyglot.detect import Detector
    
    mixed_text = u"""
    China (simplified Chinese: 中国; traditional Chinese: 中國),
    officially the People's Republic of China (PRC), is a sovereign state
    located in East Asia.
    """
    for language in Detector(mixed_text).languages:
            print(language)
    
    # name: English     code: en       confidence:  87.0 read bytes:  1154
    # name: Chinese     code: zh_Hant  confidence:   5.0 read bytes:  1755
    # name: un          code: un       confidence:   0.0 read bytes:     0
    

    pip install polyglot

    নির্ভরতা ইনস্টল করতে, চালান: sudo apt-get install python-numpy libicu-dev

  3. চার্টেটের ভাষা সনাক্তকরণের একটি বৈশিষ্ট্যও রয়েছে যদি সেখানে পরিসরে অক্ষর বাইট থাকে (127-255]:

    >>> chardet.detect("Я люблю вкусные пампушки".encode('cp1251'))
    {'encoding': 'windows-1251', 'confidence': 0.9637267119204621, 'language': 'Russian'}
    

    pip install chardet

  4. langdetect পাঠ্যের বড় অংশ প্রয়োজন। এটি হুডের অধীনে অ-নিরস্তিক পদ্ধতি ব্যবহার করে। এর অর্থ আপনি একই পাঠ্যের নমুনার জন্য পৃথক ফলাফল পান। ডক্স বলছে এটি নির্ধারণ করার জন্য আপনাকে নিম্নলিখিত কোডগুলি ব্যবহার করতে হবে:

    from langdetect import detect, DetectorFactory
    DetectorFactory.seed = 0
    detect('今一はお前さん')
    

    pip install langdetect

  5. guess_language অভিধান সহ এই বানান পরীক্ষকটি ব্যবহার করে খুব সংক্ষিপ্ত নমুনা সনাক্ত করতে পারে ।

    pip install guess_language-spirit

  6. langid উভয় মডিউল সরবরাহ করে

    import langid
    langid.classify("This is a test")
    # ('en', -54.41310358047485)
    

    এবং একটি কমান্ড-লাইন সরঞ্জাম:

    $ langid < README.md
    

    pip install langid

  7. ফাস্ট টেক্সট একটি পাঠ্য শ্রেণিবদ্ধকারী, ভাষা শ্রেণিবদ্ধকরণের জন্য একটি উপযুক্ত মডেল সহ 176 টি ভাষা সনাক্ত করতে ব্যবহার করা যেতে পারে । এই মডেলটি ডাউনলোড করুন , তারপরে:

    import fasttext
    model = fasttext.load_model('lid.176.ftz')
    print(model.predict('الشمس تشرق', k=2))  # top 2 matching languages
    
    (('__label__ar', '__label__fa'), array([0.98124713, 0.01265871]))
    

    pip install fasttext

  8. pyCLD3 ভাষা সনাক্তকরণের জন্য একটি নিউরাল নেটওয়ার্ক মডেল। এই প্যাকেজে আনফারেন্স কোড এবং একটি প্রশিক্ষিত মডেল রয়েছে।

    import cld3
    cld3.get_language("影響包含對氣候的變化以及自然資源的枯竭程度")
    
    LanguagePrediction(language='zh', probability=0.999969482421875, is_reliable=True, proportion=1.0)
    

    pip install pycld3


4
detectlangএর চেয়ে অনেক দ্রুতTextblob
আনোয়ারভিক

7
@ আনওয়ারভিক টেক্সটব্লগ গুগল এপিআই ( github.com/sloria/TextBlob/blob/dev/textblob/translate.py#L33 ) ব্যবহার করে! কেন এটি ধীর।
থমাস ডেকাউক্স

4
polyglotআমার ব্যবহারের ক্ষেত্রে সবচেয়ে পারফরম্যান্স হওয়া শেষ হয়েছে ended langid
য়

4
ভাষা সনাক্তকরণ যদি আপনার একমাত্র প্রয়োজন হয় তবে আপনাকে সম্পূর্ণ পলিগ্লোট প্যাকেজটি মোকাবেলা করতে হবে না। দস্তাবেজগুলিতে বর্ণিত হিসাবে , সনাক্তকরণটি পাইপিসিএলডি 2 দ্বারা সম্পন্ন হয়েছে যা খুব সহজ এবং ব্যবহারযোগ্য লাইব্রেরি।
জিয়েকোমন

4
রয়েছে pyCLD3
ttthomasssss

7

langdetectএটি যখন সমান্তরালতার জন্য ব্যবহৃত হচ্ছে তখন একটি সমস্যা রয়েছে এবং এটি ব্যর্থ হয়। তবে spacy_langdetectএটির জন্য একটি মোড়ক এবং আপনি এটি সেই উদ্দেশ্যে ব্যবহার করতে পারেন। আপনি নিম্নলিখিত স্নিপেটটিও ব্যবহার করতে পারেন:

import spacy
from spacy_langdetect import LanguageDetector

nlp = spacy.load("en")
nlp.add_pipe(LanguageDetector(), name="language_detector", last=True)
text = "This is English text Er lebt mit seinen Eltern und seiner Schwester in Berlin. Yo me divierto todos los días en el parque. Je m'appelle Angélica Summer, j'ai 12 ans et je suis canadienne."
doc = nlp(text)
# document level language detection. Think of it like average language of document!
print(doc._.language['language'])
# sentence level language detection
for i, sent in enumerate(doc.sents):
    print(sent, sent._.language)

আমি আপনার উত্তর অনুসরণ করেছি, কিন্তু আমি মনে করি আমি এখনও এর মতো গতি পাচ্ছি langdetect। আমার পাঠ্য সহ একটি ডিএফ কলাম আছে, আমি column.apply()একটি ফাংশন করণ সহ ব্যবহার করছি scipy_langdetect। কোনও পরামর্শ?
ষভ সাহরাওয়াত

ফাংশনের সমান্তরালতার মতো সুবিধা গ্রহণের জন্য আপনাকে একটি সমান্তরাল গ্রন্থাগার ব্যবহার করতে হবে dask, অন্যথায় এটি কোনও পার্থক্য করবে না।
হাবিব কার্বাসিয়ান

3

আপনি যদি এমন একটি গ্রন্থাগার সন্ধান করছেন যা দীর্ঘ পাঠ্য সহ দ্রুত , polyglotএবংfastext করছেন যা এখানে সেরা কাজ করছে।

আমি নোংরা এবং এলোমেলো এইচটিএমএল সংগ্রহ থেকে 10000 নথি স্যাম্পল করেছি এবং ফলাফল এখানে:

+------------+----------+
| Library    | Time     |
+------------+----------+
| polyglot   | 3.67 s   |
+------------+----------+
| fasttext   | 6.41     |
+------------+----------+
| cld3       | 14 s     |
+------------+----------+
| langid     | 1min 8s  |
+------------+----------+
| langdetect | 2min 53s |
+------------+----------+
| chardet    | 4min 36s |
+------------+----------+

আমি লক্ষ করেছি যে প্রচুর পদ্ধতিগুলি সংক্ষিপ্ত পাঠগুলিতে ফোকাস করে, সম্ভবত এটি সমাধান করা কঠিন সমস্যা: আপনার যদি অনেকগুলি পাঠ্য থাকে, তবে ভাষাগুলি সনাক্ত করা সত্যই সহজ (উদাহরণস্বরূপ, কেবল একটি অভিধান ব্যবহার করতে পারে!)। যাইহোক, এটি দীর্ঘ পাঠ্যগুলির জন্য একটি সহজ এবং উপযুক্ত পদ্ধতির সন্ধান করা কঠিন করে তোলে।


polyglotভাষা সনাক্তকরণ ভিত্তিক pycld2, এটি মোটেও দ্রুত নয়। বা এক ধরণের ব্যাচ মোডে ভাষা সনাক্ত করার জন্য এটি ব্যবহার করার কোনও উপায় আছে? আমি কেবল বাক্য দ্বারা বাক্য পরিচালনা করার চেষ্টা করেছি।
উইক্টর স্ট্রিবিউউ

আমি ধরে নিই যে লম্বা পাঠ্যটি একই ভাষায়। আমি 10000 নথিগুলি পড়েছি এবং সেগুলিকে স্মৃতিতে রেখেছি। ফাস্টটেক্সটসিসির জন্য আমাকে \nচরিত্রগুলি সরিয়ে ফেলতে হবে , তবে বহুগ্লোটের জন্য নয় (সিডিএল 2 ফলাফলগুলি একই রকম ছিল, আমি এটিও পরীক্ষা করেছি)। আমি বুঝতে পারছি না যে আপনি কেন বহুগ্লাটটি ধীর বলে মনে করেন, এটি ছিল দ্রুততম। আপনি কি মনে করেন \nযে আমারও এটি সরিয়ে দেওয়া উচিত ছিল এবং আমার ফলাফলগুলি প্রথম বাক্যটি প্রতিফলিত করে (যেমন, প্রথমের আগে \n)
টোটো_টিকো

আমি বলতে চাইছি, আমি কয়েক মিলিয়ন পৃথক নথির ভাষাগুলি পরীক্ষা করি যা সমস্ত এক লাইনের স্ট্রিং। পাইকল্ড 2 দিয়ে এটি ধীর।
উইক্টর স্ট্রিবিউউ

আমি দেখছি, আমি মনে করি না যে এটি করার কোনও উপায় আছে। একে একে করতে হবে। আপনার দস্তাবেজগুলি কোথায় সংরক্ষণ করা হয়েছে তার উপর নির্ভর করে আপনি মাল্টিপ্রসেসিং ক্ষমতা ব্যবহার করতে সক্ষম হতে পারেন। এছাড়াও, আমি ফাস্টটেক্সটসিসি ব্যবহার করা শেষ করেছি কারণ এশিয়ান ভাষার এনকোডিংগুলি নিয়ে আমার কিছুটা সমস্যা ছিল।
টোটো_টিকো

আমার ক্ষেত্রে, বেশিরভাগ দস্তাবেজ দীর্ঘ ছিল এবং ছোট একটি বাক্য সহ একটি মানদণ্ড খুব আলাদা দেখাচ্ছে।
টোটো_টিকো

3

আপনি পাইথনের জন্য গুগলট্রান্স (আনঅফিসিয়াল) একটি নিখরচায় এবং সীমাহীন গুগল অনুবাদ API ব্যবহার করতে পারেন ।

আপনি যত খুশি অনুরোধ করতে পারেন, সীমাবদ্ধতা নেই

স্থাপন:

$ pip install googletrans

ভাষা সনাক্তকরণ:

>>> from googletrans import Translator
>>> t = Translator().detect("hello world!")
>>> t.lang
'en'
>>> t.confidence
0.8225234

2

কেসের উপর নির্ভর করে আপনি নিম্নলিখিত পদ্ধতিগুলির মধ্যে একটিতে আগ্রহী হতে পারেন:

পদ্ধতি 0: একটি এপিআই বা লাইব্রেরি ব্যবহার করুন

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

পদ্ধতি 1: ভাষার মডেল

একটি ভাষা মডেল আমাদের শব্দের অনুক্রমের সম্ভাবনা দেয়। এটি গুরুত্বপূর্ণ কারণ এটি আমাদের পাঠ্যের ভাষাটি দৃ contains়তার সাথে সনাক্ত করতে দেয়, এমনকি যখন পাঠ্যে অন্যান্য ভাষায় শব্দ থাকে (যেমন: "'হোলার অর্থ স্প্যানিশ ভাষায়' হ্যালো '" )

আপনি আপনার পাঠ্যকে স্কোর করতে এন ভাষার মডেলগুলি (প্রতি ভাষা এক) ব্যবহার করতে পারেন। চিহ্নিত ভাষাটি সেই মডেলের ভাষা হবে যা আপনাকে সর্বোচ্চ স্কোর দিয়েছে gave

আপনি যদি এর জন্য একটি সাধারণ ভাষার মডেল তৈরি করতে চান তবে আমি 1-গ্রামে যেতে চাই। এটি করতে, আপনাকে কেবলমাত্র একটি বড় পাঠ্য থেকে প্রতিটি শব্দ (যেমন "এক্স" ভাষায় উইকিপিডিয়া কর্পস) প্রদর্শিত হয়েছে তার সংখ্যা গণনা করতে হবে।

তারপরে, কোনও শব্দের সম্ভাবনা হ'ল তার ফ্রিকোয়েন্সি বিশ্লেষণ করা মোট শব্দের সংখ্যার (সমস্ত ফ্রিকোয়েন্সিগুলির যোগফল) দ্বারা বিভক্ত হবে।

the 23135851162
of  13151942776
and 12997637966
to  12136980858
a   9081174698
in  8469404971
for 5933321709
...

=> P("'Hola' means 'hello' in spanish") = P("hola") * P("means") * P("hello") * P("in") * P("spanish")

যদি সনাক্তকরণের পাঠ্যটি বেশ বড় হয় তবে আমি ভাসমান-পয়েন্ট নির্ভুলতার সমস্যাগুলি এড়াতে এন এলোমেলো শব্দের নমুনা দেওয়ার পরামর্শ দিই এবং তারপরে গুণের পরিবর্তে লগারিদমের যোগফল ব্যবহার করি।

P(s) = 0.03 * 0.01 * 0.014 = 0.0000042
P(s) = log10(0.03) + log10(0.01) + log10(0.014) = -5.376

পদ্ধতি 2: সংক্ষিপ্তকরণ সেট

একটি এমনকি সহজ পদ্ধতির শীর্ষ এন সবচেয়ে ঘন ঘন শব্দ সহ এন সেট (প্রতি ভাষা এক) প্রস্তুত করা হয়। তারপরে প্রতিটি সেট দিয়ে আপনার পাঠ্য ছেদ করুন। সর্বাধিক সংখ্যক ছেদকৃত সেটটি আপনার চিহ্নিত ভাষা হবে detected

spanish_set = {"de", "hola", "la", "casa",...}
english_set = {"of", "hello", "the", "house",...}
czech_set = {"z", "ahoj", "závěrky", "dům",...}
...

text_set = {"hola", "means", "hello", "in", "spanish"}

spanish_votes = text_set.intersection(spanish_set)  # 1
english_votes = text_set.intersection(english_set)  # 4
czech_votes = text_set.intersection(czech_set)  # 0
...

পদ্ধতি 3: জিপ কম্প্রেশন

এটি অন্য যে কোনও কিছুর চেয়ে কৌতূহল, তবে এটি এখানে যায় ... আপনি আপনার পাঠ্যকে সংকুচিত করতে পারেন (উদাহরণস্বরূপ LZ77) এবং তারপরে একটি রেফারেন্স সংক্ষেপিত পাঠ (টার্গেট ল্যাঙ্গুয়েজ) এর সাথে জিপ-দূরত্ব পরিমাপ করতে পারেন। ব্যক্তিগতভাবে, আমি এটি পছন্দ করি নি কারণ এটি অন্যান্য পদ্ধতির তুলনায় ধীর, কম নির্ভুল এবং কম বর্ণনামূলক। তবুও, এই পদ্ধতির জন্য আকর্ষণীয় অ্যাপ্লিকেশন থাকতে পারে। আরও পড়তে: ভাষা গাছ এবং জিপিং


1

প্রেট্রেইনড ফাস্ট টেক্সট মডেল আমার অনুরূপ প্রয়োজনগুলির জন্য সেরা কাজ করেছে

আমি খুব অনুরূপ প্রয়োজনে আপনার প্রশ্নে পৌঁছেছি। আমার সুনির্দিষ্ট প্রয়োজনের জন্য আমি রাবশের উত্তরগুলি থেকে সর্বাধিক সহায়তা পেয়েছি।

Recommendations০,০০০+ টেক্সট ফাইলে যে পাঠ্য ফাইলগুলি ইংরেজিতে ছিল তা নিশ্চিত করে দেওয়া হয়েছিল, তার সুপারিশগুলির মধ্যে সবচেয়ে ভাল কী কাজ করেছে তা অনুসন্ধানের জন্য, আমি আবিষ্কার করেছি যে এই জাতীয় কাজের জন্য ফাস্টটেক্সট একটি দুর্দান্ত সরঞ্জাম ছিল।

একটি সামান্য কাজ সহ, আমার কাছে একটি সরঞ্জাম ছিল যা অনেকগুলি ফাইলে খুব দ্রুত কাজ করে। তবে এটি আপনার কেসের মতো কোনও কিছুর জন্য সহজেই সংশোধন করা যেতে পারে, কারণ ফাস্টটেক্সট সহজেই লাইনের একটি তালিকাতে কাজ করে।

মন্তব্য সহ আমার কোড এই পোস্টের উত্তরগুলির মধ্যে রয়েছে । আমি বিশ্বাস করি যে আপনি এবং অন্যরা সহজেই অন্যান্য নির্দিষ্ট প্রয়োজনীয়তার জন্য এই কোডটি সংশোধন করতে পারেন।


0

আপনি ইনপুট স্ট্রিংয়ে অক্ষরগুলির ইউনিকোড গ্রুপ নির্ধারণ করার চেষ্টা করতে পারেন ভাষার ধরণটি নির্দেশ করার জন্য, (উদাহরণস্বরূপ রাশিয়ার জন্য সিরিলিক), এবং তারপরে পাঠ্যটিতে ভাষা-নির্দিষ্ট চিহ্নগুলি সন্ধান করতে পারেন।


0

আমি সেখানে সমস্ত গ্রন্থাগার চেষ্টা করেছি এবং আমি এই সিদ্ধান্তে পৌঁছেছি যে পাইকल्ड 2 সেরা এবং দ্রুত এবং নির্ভুল।

আপনি এটি এটি ইনস্টল করতে পারেন:

python -m pip install -U pycld2

আপনি এটি এর মতো ব্যবহার করতে পারেন:

isReliable, textBytesFound, details = cld2.detect(your_sentence)

print(isReliable, details[0][1]) # reliablity(bool),lang abbrev.(en/es/de...)   
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.