আমি এটি পেতে চাই:
Input text: "ру́сский язы́к"
Output text: "Russian"
Input text: "中文"
Output text: "Chinese"
Input text: "にほんご"
Output text: "Japanese"
Input text: "العَرَبِيَّة"
Output text: "Arabic"
অজগরে কীভাবে করব? ধন্যবাদ
আমি এটি পেতে চাই:
Input text: "ру́сский язы́к"
Output text: "Russian"
Input text: "中文"
Output text: "Chinese"
Input text: "にほんご"
Output text: "Japanese"
Input text: "العَرَبِيَّة"
Output text: "Arabic"
অজগরে কীভাবে করব? ধন্যবাদ
উত্তর:
আপনি ল্যাংডেটেক্টে একবার দেখেছেন ?
from langdetect import detect
lang = detect("Ein, zwei, drei, vier")
print lang
#output: de
ro
(রোমানিয়ান) হিসাবে পাঠ্য 'শারীরবৃত্তীয় কাঠামো'র ভাষা সনাক্ত করে । এই জাতীয় ক্ষেত্রে একাধিক ভাষার আউটপুট প্রয়োজন। বহুগ্লোট আরও ভাল পারফর্ম করে।
langdetect
বিভিন্ন ভাষা নির্ধারণ করতে পারে :-)
পাঠ্যব্লব । এনএলটিকে প্যাকেজ দরকার, গুগল ব্যবহার করে।
from textblob import TextBlob
b = TextBlob("bonjour")
b.detect_language()
pip install textblob
বহুগ্লোট । অদ্ভুত এবং কিছু আরকেন গ্রন্থাগার প্রয়োজন, এটি উইন্ডোজের পক্ষে কাজ করার সম্ভাবনা নয় । (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
চার্টেটের ভাষা সনাক্তকরণের একটি বৈশিষ্ট্যও রয়েছে যদি সেখানে পরিসরে অক্ষর বাইট থাকে (127-255]:
>>> chardet.detect("Я люблю вкусные пампушки".encode('cp1251'))
{'encoding': 'windows-1251', 'confidence': 0.9637267119204621, 'language': 'Russian'}
pip install chardet
langdetect পাঠ্যের বড় অংশ প্রয়োজন। এটি হুডের অধীনে অ-নিরস্তিক পদ্ধতি ব্যবহার করে। এর অর্থ আপনি একই পাঠ্যের নমুনার জন্য পৃথক ফলাফল পান। ডক্স বলছে এটি নির্ধারণ করার জন্য আপনাকে নিম্নলিখিত কোডগুলি ব্যবহার করতে হবে:
from langdetect import detect, DetectorFactory
DetectorFactory.seed = 0
detect('今一はお前さん')
pip install langdetect
guess_language অভিধান সহ এই বানান পরীক্ষকটি ব্যবহার করে খুব সংক্ষিপ্ত নমুনা সনাক্ত করতে পারে ।
pip install guess_language-spirit
langid উভয় মডিউল সরবরাহ করে
import langid
langid.classify("This is a test")
# ('en', -54.41310358047485)
এবং একটি কমান্ড-লাইন সরঞ্জাম:
$ langid < README.md
pip install langid
ফাস্ট টেক্সট একটি পাঠ্য শ্রেণিবদ্ধকারী, ভাষা শ্রেণিবদ্ধকরণের জন্য একটি উপযুক্ত মডেল সহ 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
pyCLD3 ভাষা সনাক্তকরণের জন্য একটি নিউরাল নেটওয়ার্ক মডেল। এই প্যাকেজে আনফারেন্স কোড এবং একটি প্রশিক্ষিত মডেল রয়েছে।
import cld3
cld3.get_language("影響包含對氣候的變化以及自然資源的枯竭程度")
LanguagePrediction(language='zh', probability=0.999969482421875, is_reliable=True, proportion=1.0)
pip install pycld3
detectlang
এর চেয়ে অনেক দ্রুতTextblob
polyglot
আমার ব্যবহারের ক্ষেত্রে সবচেয়ে পারফরম্যান্স হওয়া শেষ হয়েছে ended langid
২
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
, অন্যথায় এটি কোনও পার্থক্য করবে না।
আপনি যদি এমন একটি গ্রন্থাগার সন্ধান করছেন যা দীর্ঘ পাঠ্য সহ দ্রুত , 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
, এটি মোটেও দ্রুত নয়। বা এক ধরণের ব্যাচ মোডে ভাষা সনাক্ত করার জন্য এটি ব্যবহার করার কোনও উপায় আছে? আমি কেবল বাক্য দ্বারা বাক্য পরিচালনা করার চেষ্টা করেছি।
\n
চরিত্রগুলি সরিয়ে ফেলতে হবে , তবে বহুগ্লোটের জন্য নয় (সিডিএল 2 ফলাফলগুলি একই রকম ছিল, আমি এটিও পরীক্ষা করেছি)। আমি বুঝতে পারছি না যে আপনি কেন বহুগ্লাটটি ধীর বলে মনে করেন, এটি ছিল দ্রুততম। আপনি কি মনে করেন \n
যে আমারও এটি সরিয়ে দেওয়া উচিত ছিল এবং আমার ফলাফলগুলি প্রথম বাক্যটি প্রতিফলিত করে (যেমন, প্রথমের আগে \n
)
আপনি পাইথনের জন্য গুগলট্রান্স (আনঅফিসিয়াল) একটি নিখরচায় এবং সীমাহীন গুগল অনুবাদ API ব্যবহার করতে পারেন ।
আপনি যত খুশি অনুরোধ করতে পারেন, সীমাবদ্ধতা নেই
স্থাপন:
$ pip install googletrans
ভাষা সনাক্তকরণ:
>>> from googletrans import Translator
>>> t = Translator().detect("hello world!")
>>> t.lang
'en'
>>> t.confidence
0.8225234
কেসের উপর নির্ভর করে আপনি নিম্নলিখিত পদ্ধতিগুলির মধ্যে একটিতে আগ্রহী হতে পারেন:
পদ্ধতি 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) এবং তারপরে একটি রেফারেন্স সংক্ষেপিত পাঠ (টার্গেট ল্যাঙ্গুয়েজ) এর সাথে জিপ-দূরত্ব পরিমাপ করতে পারেন। ব্যক্তিগতভাবে, আমি এটি পছন্দ করি নি কারণ এটি অন্যান্য পদ্ধতির তুলনায় ধীর, কম নির্ভুল এবং কম বর্ণনামূলক। তবুও, এই পদ্ধতির জন্য আকর্ষণীয় অ্যাপ্লিকেশন থাকতে পারে। আরও পড়তে: ভাষা গাছ এবং জিপিং
আমি খুব অনুরূপ প্রয়োজনে আপনার প্রশ্নে পৌঁছেছি। আমার সুনির্দিষ্ট প্রয়োজনের জন্য আমি রাবশের উত্তরগুলি থেকে সর্বাধিক সহায়তা পেয়েছি।
Recommendations০,০০০+ টেক্সট ফাইলে যে পাঠ্য ফাইলগুলি ইংরেজিতে ছিল তা নিশ্চিত করে দেওয়া হয়েছিল, তার সুপারিশগুলির মধ্যে সবচেয়ে ভাল কী কাজ করেছে তা অনুসন্ধানের জন্য, আমি আবিষ্কার করেছি যে এই জাতীয় কাজের জন্য ফাস্টটেক্সট একটি দুর্দান্ত সরঞ্জাম ছিল।
একটি সামান্য কাজ সহ, আমার কাছে একটি সরঞ্জাম ছিল যা অনেকগুলি ফাইলে খুব দ্রুত কাজ করে। তবে এটি আপনার কেসের মতো কোনও কিছুর জন্য সহজেই সংশোধন করা যেতে পারে, কারণ ফাস্টটেক্সট সহজেই লাইনের একটি তালিকাতে কাজ করে।
মন্তব্য সহ আমার কোড এই পোস্টের উত্তরগুলির মধ্যে রয়েছে । আমি বিশ্বাস করি যে আপনি এবং অন্যরা সহজেই অন্যান্য নির্দিষ্ট প্রয়োজনীয়তার জন্য এই কোডটি সংশোধন করতে পারেন।
আমি সেখানে সমস্ত গ্রন্থাগার চেষ্টা করেছি এবং আমি এই সিদ্ধান্তে পৌঁছেছি যে পাইকल्ड 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...)