سرویسهای متنکاوی و پردازش متن فارسییار
ابزارهای پردازش متن
متن کاوی یکی از شاخههای مهم پردازش زبان طبیعی محسوب میشود. در ادامه، ابزارهای مختلف پردازش زبان طبیعی به ترتیب (متداول) استفاده برای پیشپردازش متن بهمراه نمونه کد برای آنها معرفی میشوند. منظور از ابزارهای پردازش متن، کتابخانههایی است که برای آمادهسازی متن جهت متن کاوی و استخراج دانش از متن بکار میروند.
لازم به ذکر است که برای اجرای نمونه کدهای مربوط به زبان فارسی ابتدای فایل شبه کد ذیل را اضافه نمایید و قبل از اجرا لازم است تا عبارت YOUR_API_KEY (خط 14 شبه کد زیر) را با کلید ای.پی.آی واقعی خودتان جایگزین نمایید. شما میتوانید در کمتر از دو دقیقه از اینجا کلید API رایگان برای استفاده از کلیه امکانات متن کاوی فارسی تهیه کنید.
import requests
import json
def callApi(url, data, tokenKey):
headers = {
'Content-Type': "application/json",
'Authorization': "Bearer " + tokenKey,
'Cache-Control': "no-cache"
}
response = requests.request("POST", url, data=data.encode("utf-8"), headers=headers)
return response.text
##################### Get Token by Api Key ##########################
url = "http://api.text-mining.ir/api/Token/GetToken"
querystring = {"apikey":"YOUR_API_KEY"}
response = requests.request("GET", url, params=querystring)
data = json.loads(response.text)
tokenKey = data['token']
نرمالساز متن (Normalizer)
هدف این ابزار، تمیز و مرتب کردن متن و یکسانسازی کاراکترها با جایگزین کردن کاراکترهای استاندارد در متن ورودی است. در واقع قبل از پردازش متون جهت استانداردسازی حروف و فاصلهها بایستی پیشپردازشهایی روی آنها انجام شود. در واقع در این مرحله بایستی همهی نویسههای (حروف) متن با جایگزینی با معادل استاندارد آنها، یکسانسازی گردند. در پردازش رسم الخط زبان فارسی، با توجه به شباهتی که با رسم الخط عربی دارد، همواره در نگارش تعدادی از حرفها مشکل استفاده از کاراکترهای عربی معادل وجود دارد؛ که از جملهی آنها میتوان به حروف “ک”، “ی” و همزه اشاره نمود. در اولین گام باید مشکلات مربوط به این حروف را با یکسانسازی آنها برطرف کرد.
علاوه بر این، اصلاح و یکسانسازی نویسهی نیمفاصله و فاصله در کاربردهای مختلف آن و همچنین حذف نویسههای اعراب، تشدید، تنوین و «ـ» که برای کشش نویسههای چسبان مورد استفاده قرار میگیرد و مواردی مشابه برای یکسانسازی متون، از اقدامات لازم قبل از شروع پردازش متن میباشد.
در ابزار طراحی شده و موجود در سامانه متن کاوی حدود هزار کاراکتر (حرف) با معادل صحیح آن در صفحه کلید استاندارد فارسی جایگزین میشود.
سپس مطابق با یک سری قاعده دقیق و مشخص، فاصلهها و نیمفاصلههای موجود در متن برای وندهایی نظیر “ها”، “تر” و “ی” غیرچسبان (در انتهای لغات) و همچنین پیشوندها و پسوندهای فعلساز نظیر “نمی”، “می”، “ام”، “ایم”، “اید” و موارد مشابه نیز اصلاح میگردند.
نمونه کد نرمالسازی فارسی با جایگزینی بیش از 1000 کاراکتر غیراستاندارد و اصلاح فاصله و نیمفاصلهها بصورت ذیل میباشد:
url = "http://api.text-mining.ir/api/PreProcessing/NormalizePersianWord"
payload = u"{\"text\":\"ولــے اگــر دڪــمــه مــڪــث رو لــمــس ڪــنــیــم ڪــلــا مــتــن چــنــدیــن صــفــحــه جــابــه جــا مــیــشــه و دیــگــه نــمــیــشــه فــهمــیــد ڪــدوم آیــه تــلــاوت مــی شود بــایــد چــے ڪــنــیــم؟.\", \"refineSeparatedAffix\":true}"
print(callApi(url, payload, tokenKey))
خروجی:
ولی اگر دکمه مکث رو لمس کنیم کلا متن چندین صفحه جابه جا میشه و دیگه نمیشه فهمید کدوم آیه تلاوت میشود باید چی کنیم؟
تقطیع جملات و واژهها (Sentence Splitter and Tokenizer)
هدف این ابزار شخیص جملات را در متن ورودی است. به عبارت دیگر جداسازی جملات ساده و مرکب (غیرتودرتو) و واژهها و عبارات خاص (توکنها) از یکدیگر هست. پس از پایان مرحلهی نرمالسازی متن، ابزار تشخیصدهندهی جملات با استفاده از نمادهای (علامتهای) پایانی جمله از قبیل: ”.“،”؛“، ”!“، ”؟“، ”?“، … و بکارگیری برخی علائم، قواعد دستوری زبان و در نظرگرفتن حروف ربط یا برخی لغات آغاز کنندهی جملات مرکب (از قبیل حروف ربط مانند “که”، “تا”، “اما”، “ولی”، “زیرا”، “سپس”، “و”، “یا”، … در زبان فارسی)، مرز جملهها را تعیین مینماید. تشخیصدهندهی لغات (توکن) نیز با استفاده از علامتهای فضای خالی، ”،“، ”,“، ”-“ و غیره و در نظر گرفتن اصلاحات اعمال شده در مورد پیشوندها و پسوندها در فاز قبلی، واحدهای با معنی مانند واژهها را شناسایی مینماید.
در ابزار طراحی شده و موجود در سامانه متن کاوی، علاوه بر شناسایی واژهها، پردازش ویژهای برای درنظر گرفتن توکن واحد برای کلمات اختصاری (از قبیل A.T.R یا بی.بی.سی)، تاریخ و زمان (از قبیل ۵:۳۵ یا ۲۰۱۵/۲/۲۵)، اعداد اعشاری (از قبیل ۵/۱۷ یا ۵٫۱۷)، آدرس صفحات وب، ایمیل و سایر عبارات و علائم خاص (جایگزینی کلمه ”ا… “ با کلمه اصلی آن) انجام میشود.
با توجه به پایه بودن جمله یا توکن در بسیاری از پردازشهای زبانی، خروجی دقیق این ابزار از درجهی اهمیت بالایی برخوردار است.
نمونه کد این ابزار برای زبان فارسی:
url = "http://api.text-mining.ir/api/PreProcessing/SentenceSplitterAndTokenize"
payload = u'''{\"text\": \"من با دوستم به مدرسه می رفتیم و در آنجا مشغول به تحصیل بودیم. سپس به دانشگاه راه یافتیم\",
\"checkSlang\": true,
\"normalize\": true,
\"normalizerParams\": {
\"text\": \"don't care\",
\"replaceWildChar\": true,
\"replaceDigit\": true,
\"refineSeparatedAffix\": true,
\"refineQuotationPunc\": false
},
\"complexSentence\": false}'''
print(callApi(url, payload, tokenKey))
خروجی:
[["من","با","دوستم","به","مدرسه","میرفتیم"],["و","در","آنجا","مشغول","به","تحصیل","بودیم","."],["سپس","به","دانشگاه","راه","یافتیم"]]
تشخیص کسره اضافه
با آنکه کسرۀ اضافه در زبان فارسی بازنمایی صوری ندارد و به بیانی در صورتبندی زبانی، وزنهای به شمار نمیرود، اما به لحاظ کارکردی بسیار ضروری و حائز اهمیت است. از این ابزار در ابزارهای تشخیص موجودیتهای نامی، قطعهبند جملات و … میتوان استفاده کرد. شناسایی کسره اضافه از دو رویکرد زبانشناسی (بوسیله تعیین نقش کلمات و بدست آوردن درخت تجزیه جملات) و یادگیری ماشین (با استفاده از پیکره برچسب خورده) میسر است.
حذف کلمات توقف (Stop Word Removal)
منظور از حذف کلمات توقف، حذف علائم، اعداد، کلمات عمومی و بدون ارزش معنایی (از قبیل: از، در، با، به، است، پس، …) در جمله است. در بسیاری از کاربردهای بازیابی اطلاعات، حذف لغات کماهمیت که شاخصه متن نیستند، میتواند بدون از بین بردن معنا باعث بهبود دقت و سرعت الگوریتمهای متنکاوی شوند. لیست کلمات توقف وابسته به کاربرد مورد نظر باید تهیه شود. برای مثال: کلمات “هست” و “نیست” برای دستهبندی موضوعی متن حائز اهمیت نیستند ولی در تحلیل حس، میتوانند حس جمله را معکوس کنند.
نمونه کد این ابزار برای زبان فارسی:
url = "http://api.text-mining.ir/api/InformationRetrieval/StopWordRemoval"
payload = u''' "تیم متن کاوی فارسییار با مجموعهای از فارغ التحصیلان دانشگاههای صنعتی شریف، تربیت مدرس و فردوسی مشهد از سال ۱۳۹۰ بصورت تخصصی در زمینه پردازش زبان طبیعی مشغول به فعالیت است. در سال ۱۳۹۶ در جهت فعالیت پژوهشی عمیقتر در زمینه پردازش متون برای زبان فارسی، این گروه با آزمایشگاه متن کاوی و یادگیری ماشین پژوهشگاه علوم و فناوری اطلاعات ایران (ایرانداک) همکاری تنگاتنگی داشته است." '''
print(callApi(url, payload, tokenKey))
خروجی:
# result: تیم متن کاوی فارسییار مجموعهای فارغ التحصیلان دانشگاههای صنعتی شریف، تربیت مدرس فردوسی مشهد سال ۱۳۹۰ تخصصی پردازش زبان طبیعی مشغول فعالیت. سال ۱۳۹۶ فعالیت پژوهشی عمیقتر پردازش متون زبان فارسی، گروه آزمایشگاه متن کاوی یادگیری ماشین پژوهشگاه علوم فناوری اطلاعات ایران (ایرانداک) همکاری تنگاتنگی.
نمونه کد این ابزار با استفاده از NLTK:
input_str = “NLTK is a leading platform for building Python programs to work with human language data.”
stop_words = set(stopwords.words(‘english’))
from nltk.tokenize import word_tokenize
tokens = word_tokenize(input_str)
result = [i for i in tokens if not i in stop_words]
print (result)
خروجی:
[‘NLTK’, ‘leading’, ‘platform’, ‘building’, ‘Python’, ‘programs’, ‘work’, ‘human’, ‘language’, ‘data’, ‘.’]
ریشهیابی کلمات یا بُنواژهیاب (Stemmer and Lemmatizer)
ریشهیابی کلمات یکی از مهمترین عملیات پیشپردازش متون در بازیابی اطلاعات و پردازش زبانهای طبیعی است. هدف الگوریتمهای ریشهیابی، حذف وندهای کلمات (پیشوند و پسوندها) و تعیین ریشه اصلی کلمه، براساس قواعد ساخت واژهای (ریختشناسی)، هستند.
برخلاف زبان انگلیسی، چالشهای مختلفی هنگام ریشهیابی کلمات زبان فارسی وجود دارد از جمله اینکه ضمایر میتوانند به دو صورت جدا و متصل در جمله ظاهر شوند. البته در مورد افعال مسئله کمی پیچیدهتر است، بطوری که علاوه بر وندهای فعلی، شخص (فاعل) و زمان جمله نیز بر روی حالت فعل تاثیرگذار هستند. معروفترین الگوریتم ریشه یابی در انگلیسی porter می باشد.
در روشهای ریشهیابی رایج، بعد از حذف انواع وندها (اشتقاقی، تصریفی و واژهبست) ممکن است معنای کلمه تغییر یابد. ولی در بُنواژهیاب (یا Lemmatizer) سعی در ریشهیابی بُن کلمه بدون تغییر مفهوم اصلی کلمه در جمله شده است.
همچنین در بنواژهیاب تولید شده در سامانه متن کاوی، قابلیت تعیین ریشه در چند سطح را دارد. برای مثال ریشه کلمه “دانشجویان” به ترتیب در سطوح مختلف : “دانشجو”، “دانش” و “دان” است. این سطوح مختلف ریشه میتوانند در کاربردهای مختلف پردازش زبان طبیعی مورد استفاده قرار گیرند. در ابزار ریشهیاب موجود در سامانه متن کاوی از دو رویکرد مبتنی بر فرهنگ لغات و قواعد ریختشناسی بهره گرفته شده است. بر پایه تحلیلهای آماری انجام شده، برای این ابزار از پنج فرهنگ لغت مختلف استفاده شده است.
نمونه کد بنواژهیابی در زبان فارسی:
url = "http://api.text-mining.ir/api/Stemmer/LemmatizeText2Text"
payload = u'"من با دانشجویان دیگری برخورد کردم. سپس به آنها گفتم\nمن با شما کارهای زیادی دارم"'
print(callApi(url, payload, tokenKey))
خروجی:
من با دانشجو دیگر بر خورد کرد. سپس به آن گفت
من با شما کار زیاد داشت
نمونه کد ریشهیاب انگلیسی بوسیله کتابخانه NLTK:
from nltk.stem import PorterStemmer
from nltk.tokenize import word_tokenize
stemmer= PorterStemmer()
input_str=”There are several types of stemming algorithms.”
input_str=word_tokenize(input_str)
for word in input_str:
print(stemmer.stem(word))
خروجی:
There are sever type of stem algorithm.
نمونه کد بنواژهیابی در زبان انگلیسی بوسیله NLTK:
from nltk.stem import WordNetLemmatizer
from nltk.tokenize import word_tokenize
lemmatizer=WordNetLemmatizer()
input_str=”been had done languages cities mice”
input_str=word_tokenize(input_str)
for word in input_str:
print(lemmatizer.lemmatize(word))
خروجی:
be have do language city mouse
تبدیل عبارات محاورهای به رسمی (Conversational/Slang to Formal Converter)
یکی از مشکلات رایج در پردازش متون نظرات وجود کلمات به شکل غیر رسمی (محاورهای) و عبارات اختصاری برای سادگی در نگارش متن نظر میباشد. درک معنای اینگونه کلمات برای انسان کار راحتی است در حالیکه در پردازش خودکار ماشینی متون، وجود این عبارات مشکلساز خواهد بود. لذا سعی میشود در فاز پیشپردازش اینگونه عبارات با شکل رسمی و صحیح آنها (که مطابق با پیکرههای متن رسمی، لغتنامهها و سایر دانشنامهها موجود است) جایگزین شود.
برای اینمنظور مشابه ریشهیاب، در ابزار تهیه شده در سامانه متن کاوی، کلمات به دو گروه فعل و غیر فعل تقسیم شده و در هر گروه وندهای (پیشوند و پسوند) کلمات و ریشه (بُن) کلمه بصورت مجزا بوسیله مجموعهای از قوانین بررسی میشوند. همچنین برای ریشه (بُن) کلمات در هر دو گروه کلمات لیستی از کلمات و اختصارات که حالت استثنا دارند، استفاده شده است.
نمونه کد:
url = "http://api.text-mining.ir/api/TextRefinement/FormalConverter"
payload = u''' "اگه اون گزینه رو کلیک کنین، یه پنجره باز میشه که میتونین رمز عبورتون رو اونجا تغییر بدین
داشتم مي رفتم برم، ديدم گرفت نشست، گفتم بذار بپرسم ببينم مياد نمياد ديدم ميگه نميخوام بيام بذار
برم بگيرم بخوابم نمیتونم بشینم.
کتابای خودتونه
نمیدونم چی بگم که دیگه اونجا نره
ساعت چن میتونین بیایین؟" '''
print(callApi(url, payload, tokenKey))
خروجی:
اگر آن گزینه را کلیک کنید، یک پنجره باز میشود که میتوانید رمز عبورتان را آنجا تغییر بدهید
داشتم میرفتم بروم، دیدم گرفت نشست، گفتم بگذار بپرسم ببینم میآید نمیآید دیدم میگوید نمیخواهم بیایم بگذار بروم بگیرم بخوابم نمیتوانم بنشینم.
کتابهای خودتان است
نمیدانم چه بگویم که دیگر آنجا نرود
ساعت چند میتوانید بیایید؟
تصحیحکننده خطاهای املایی یا خطا در تایپ کلمات (Spell Correction)
با بررسی اولیه متون شبکههای اجتماعی و نظرات میتوان پی برد که علاوه بر مشکلات مربوط به شکل اختصاری یا محاورهای کلمات، غلطهای املایی زیادی سهواً یا عمداً (برای راحتی در نگارش) در متون زبان مختلف وجود دارد. هدف از تولید این ابزار تصحیح خودکار خطاهای املایی ناشی از تایپ اشتباه کلمات در متون میباشد. بدین منظور در ابزار تصحیحکننده خطاهای املایی موجود در سامانه متن کاوی، به ازای کلمات بدون مفهوم (که کلمه یا ریشهی آن در لیست کلمات رسمی یا محاورهای زبان فارسی وجود ندارند)، شبیهترین کلمه براساس تحلیلهای آماری و از نظر املایی جایگزین آن خواهد شد. معیار استفاده شده برای آستانه شباهت املایی تبدیل کلمات به شکل ممکن است:
- جداسازی کلمات بهم چسبیده
- اصلاح/تغییر تنها یک حرف با یکی از کاراکترهای مجاور آن در صفحه کلید استاندارد زبان فارسی
- اصلاح حروف هم صدا از نظر تلفظ (مانند حروف: “ز”، “ذ”، “ض” و “ظ” که همگی به صدای “z” اشاره دارند).
نمونه کد خطایاب املایی/تایپی:
url = "http://api.text-mining.ir/api/TextRefinement/SpellCorrector"
payload = u'''{\"text\": \"فهوه با مبات میجسبد\",
\"checkSlang\": true,
\"normalize\": true,
\"candidateCount\": 2}'''
print(callApi(url, payload, tokenKey))
خروجی:
قهوه با {نبات,ملات} {میچسبد,میجنبد}
برچسبزنی ادات سخن یا نقش کلمات در جمله (Part of Speech Tagging)
برچسبزنی نقش ادات سخن عمل انتساب برچسبهای نحوی (از قبیل اسم، انواع صفت، انواع قید، نوع فعل، انواع حروف و …) به واژهها و نشانههای تشکیل دهنده یک متن است به صورتی که این برچسبها نشان دهنده نقش کلمات و نشانهها در جمله باشند. در زبان فارسی اغلب کلمات دارای نقشی واحد در جملات مختلف هستند. سایر واژگان از نقطه نظر برچسبزن نحوی دارای ابهام هستند، زیرا ممکن است کلمات در جایگاههای مختلف در جمله، برچسبهای نحوی متفاوتی داشته باشند. بنابراین برچسبزنی نحوی، عمل ابهامزدایی از برچسبها با توجه به زمینه (ساختار جمله) مورد نظر است.
ابزار تهیه شده در سامانه متن کاوی، برای برچسبگذاری نقش ادات سخن در متون فارسی، از پیکره برچسب خورده و از ترکیب دو رویکرد یادگیری ماشین و برچسبگذاری مبتنی بر قاعده استفاده مینماید.
نمونه کد برچسبزنی نقش ادات سخن در زبان فارسی:
url = "http://api.text-mining.ir/api/PosTagger/GetPos"
payload = u'"احمد و علی به مدرسه پایین خیابان می رفتند"'
result = json.loads(callApi(url, payload, tokenKey))
for phrase in result:
print("("+phrase['word']+","+phrase['tags']['POS']['item1']+") ")
خروجی:
(احمد,N)
(و,CON)
(علی,N)
(به,P)
(مدرسه,N)
(پایین,ADJ)
(خیابان,N)
(میرفتند,V)
مثالی از برچسب زنی نقش ادات سخن در زبان انگلیسی با استفاده از TextBlob:
input_str=”Parts of speech examples: an article, to write, interesting, easily, and, of”
from textblob import TextBlob
result = TextBlob(input_str)
print(result.tags)
خروجی:
[(‘Parts’, u’NNS’), (‘of’, u’IN’), (‘speech’, u’NN’), (‘examples’, u’NNS’), (‘an’, u’DT’), (‘article’, u’NN’), (‘to’, u’TO’), (‘write’, u’VB’), (‘interesting’, u’VBG’), (‘easily’, u’RB’), (‘and’, u’CC’), (‘of’, u’IN’)]
قطعهبند (Chunker) یا پارسر کمعمق (Shallow Parser)
ابزاری برای تشخیص گروههای (عبارات یا phrases) اسمی، فعلی، صفات و …. در یک جمله است. جهت تقویت ابزارهای سطح بالاتر از قبیل پارسر، برچسبزن نقش معنایی و تشخیص موجودیتهای نامدار لازم است نه تنها نقشهای کلمات مشخص گردند، بلکه باید وابستگیهای کلمات مجاور هم به لحاظ نقشی در جمله مشخص شوند. از اینرو به این ابزار پارسر سبک (light) یا کم عمق (shallow) نیز میگویند.
در ادامه نمونه کد و خروجی ابزار قطعهبند NLTK نمایش داده شده است:
input_str=”A black television and a white stove were bought for the new apartment of John.”
from textblob import TextBlob
result = TextBlob(input_str)
print(result.tags)
خروجی:
[(‘A’, u’DT’), (‘black’, u’JJ’), (‘television’, u’NN’), (‘and’, u’CC’), (‘a’, u’DT’), (‘white’, u’JJ’), (‘stove’, u’NN’), (‘were’, u’VBD’), (‘bought’, u’VBN’), (‘for’, u’IN’), (‘the’, u’DT’), (‘new’, u’JJ’), (‘apartment’, u’NN’), (‘of’, u’IN’), (‘John’, u’NNP’)]
در ادامه (مرحله بعد) قطعهبند:
reg_exp = “NP: {<DT>?<JJ>*<NN>}”
rp = nltk.RegexpParser(reg_exp)
result = rp.parse(result.tags)
print(result)
خروجی این بخش:
(S (NP A/DT black/JJ television/NN) and/CC (NP a/DT white/JJ stove/NN) were/VBD bought/VBN for/IN (NP the/DT new/JJ apartment/NN)
of/IN John/NNP)
نمایش ساختار درختی مثال فوق با دستور result.draw() :
پارسر یا تجزیهگر جملات (Parser)
به موازات پیشرفت و تحولات نظری در زبانشناسی جدید، روشهای تحلیل متون و دستورات زبان بوسیلهی رایانه نیز تحول یافته است. منظور از گرامر هر زبان، در دست داشتن یک سری دستورات زبانی قابل فهم برای رایانه است که به کمک آنها بتوان اجزای نحوی یک جمله را به طور صحیح تفکیک نمود. تجزیه و تحلیل جمله و شکستن آن به اجزای تشکیلدهنده مانند گروههای اسمی، فعلی، قیدی و غیره و روابط بین آنها توسط ابزاری به نام پارسر صورت میگیرد که نقش اساسی در طراحی و یا افزایش دقت سایر ابزارهای پردازش متن دارد.
برچسبزن نقش معنایی (Semantic Role Labeling)
ابزاری برای تشخیص نقش معنایی کلمات و اجزای جمله است. این ابزار یکی از مهمترین نقشها را در پردازشهای زبانی و درک منظور نوشته برعهده دارد. دقت در این ابزار بسیار حائز اهمیت است. این ابزار باید نقشهای معنایی کلمات در جمله مانند عامل (agent)، هدف (goal)، فعالیت (action)، نتیجه (result) و ... را تشخیص دهد. معمولاً نقشهای معنایی مختلف بر محور ارتباط آنها با بخش گزاره یا فعل جمله مشخص میشوند.
برای آشنایی بیشتر با این ابزار و مشاهده مثالهایی از زبان فارسی برای تشخیص نقش معنایی به این مقاله مراجعه فرمایید.
تشخیص موجودیتهای نامدار (Named Entity Recognition)
تشخیص موجودیتهای نامدار (نامی) به این معناست که اسامی خاص در یک متن را بتوان تشخیص داد و آنها را به ردههای مشخصی دستهبندی کرد. این ردهها چیزهای مختلفی از قبیل اعم از اسامی افراد، اماکن، سازمانها، مقادیر عددی و … میتوانند باشند. متاسفانه تهیه لیست اسامی خاص خیلی وقتها کمکی چندانی نمیکند، چون نوعاً کلماتی وجود دارند که میتوانند با توجه به جمله و متن، در چند رده قرار بگیرند. دو رویکرد استفاده از الگوهای متنی و استفاده از روشهای یادگیری ماشین برای حل این مشکل وجود دارد. با توجه به ضعفها و موارد استثنای زیاد استفاده از رویکرد الگوهای متنی به تنهایی خیلی کاربردی نیست و رویکرد مبتنی بر روشهای یادگیری ماشین توصیه میشود. در روشهای یادگیری ماشین از قواعد از پیشتعیین شده و لیست لغات استفاده نمیشود و به جای آن از حجم زیادی از دادههای برچسبخورده (یا در برخی موارد بدون برچسب) استفاده میشود.
نمونه کد ابزار NER در زبان فارسی:
url = "http://api.text-mining.ir/api/NamedEntityRecognition/Detect"
payload = u'"احمد عباسی به تحصیلات خود در دانشگاه آزاد اسلامی در مشهد ادامه داد"'
result = json.loads(callApi(url, payload, tokenKey))
for phrase in result:
print("("+phrase['word']+","+phrase['tags']['NER']['item1']+") ")
خروجی:
(احمد,B-PER)
(عباسی,I-PER)
(به,O)
(تحصیلات,O)
(خود,O)
(در,O)
(دانشگاه,B-ORG)
(آزاد,I-ORG)
(اسلامی,I-ORG)
(در,O)
(مشهد,B-LOC)
(ادامه,O)
(داد,O)
نمونه کد NLTK و خروجی بدست آمده این ابزار در زبان انگلیسی:
from nltk import word_tokenize, pos_tag, ne_chunk
input_str = “Bill works for Apple so he went to Boston for a conference.”
print ne_chunk(pos_tag(word_tokenize(input_str)))
خروجی:
(S (PERSON Bill/NNP) works/VBZ for/IN Apple/NNP so/IN he/PRP went/VBD to/TO (GPE Boston/NNP) for/IN a/DT conference/NN ./.)
ارجاع به ضمایر هممرجع یا مرجعیابی ضمایر (Coreference Resolution)
هدف این ابزار تعیین مرجع اسمی، یک ضمیر یا اسم اشاره در جملات یک متن است. این ابزار در زبان انگلیسی معادل ابزاری است که مرجع ضمیر را که به صورت اسم در ابتدای جمله یا جملههای قبلی آمده است، مشخص میکند. استفاده از ضمایر به جای اسامی در زبان انگلیسی بسیر رایج میباشد. البته در زبان فارسی این کار چندان رایج نیست. اما در زبان فارسی عنوان یک مفهوم اسمی با اصطلاحات و عناوین مختلف بسیار رایج است. پس هدف طراحی ابزاری است که مرجع خاص عناوین مختلف اسمی (که به یک اسم/موجودیت خاص اشاره میکنند) را درون متن مشخص کند.
حاشیه نویس (Annotator)
ابزاری برای ایجاد یک نمونه از یک آنتولوژی در یک سند ورودی است. همچنین این ابزار، برای برچسبگذاری و افزودن متاداده بصورت دستی در پیکرههای متنی مورد استفاده قرار میگیرد. معروفترین ابزار موجود برای این کار GATE نام دارد.
شبکه واژگان (Wordnet)
پایگاه داده لغوی (lexical database) شامل مجموعهای از لغات در قالب گروههای هممعنی (Synset) و ارتباطات مختلف معنایی بین آنهاست. ارتباطات معنایی در داخل این مجموعه شامل ۱۶ نوع رابطه میباشد. این مجموعه به عنوان یک مرجع در بسیاری از پردازشهای زبانی برای توجه به معنای لغات مورد استفاده قرار میگیرد. از نمونههای انگلیسی آن میتوان به Princeton WordNet و EuroWordNet اشاره کرد. برای زبان فارسی تا کنون سه شبکه واژگان فارسنت (دانشگاه شهید بهشتی و مرکز تحقیقات مخابرات)، فردوسنت (دانشگاه فردوسی مشهد) و شبکه واژگان دانشگاه تهران ایجاد و منتشر شده است.
محاسبه شباهت (Similarity recognition)
ابزاری برای تشخیص میزان شباهت میان دو عبارت، جمله یا متن است. در این ابزار پس از تشخیص نوع کلمات به کار رفته در یک جمله و سپس بر اساس جایگاه آن کلمات در جمله، کلماتی که در جایگاه های یکسان قرار دارند، مورد مقایسه قرار میگیرند. برای تعیین شباهت کلمات و مفاهیم سه رویکرد مختلف وجود دارد:
- شباهت لغوی: استفاده از توابع تعیین شباهت توالی کاراکترها مثل سورنسون، جکارد، بزرگترین زیررشته مشترک و …
- شباهت معنایی: استفاده از فرهنگ لغات، شبکه واژگان و یا سایر دانشنامهها و هستانشناسیها
- شباهت آماری یا کاربردی: توجه به جایگاه مشترک یا همرخدادی در پیکره بزرگ متنی و روشهای جاسازی کلمات (word embedding)
مثالهای مربوط به ابزارهای پردازش متن زبان فارسی از اینجا و برای زبان انگلیسی از این منبع جمعآوری شدند.
استفاده از این مقاله با ذکر منبع سامانه متن کاوی فارسییار - text-mining.ir"، بلامانع است.
مطلبی دیگر از این انتشارات
معرفی بهترین کتابخانههای پردازش متن - بخش سوم (Polyglot, Gensim, NLP Curator)
مطلبی دیگر از این انتشارات
معرفی کتابهای برتر در زمینه متن کاوی و پردازش زبان طبیعی
مطلبی دیگر از این انتشارات
معرفی پیکره ویکیپدیا فارسی برای متن کاوی (بصورت اطلاعات تفکیک و پیشپردازش شده) بهمراه مدلهای تعبیه کلمات (یادگیری عمیق)