موجودیتهای نامدار در زبان به مجموعهای از اسامی مانند نام افراد، سازمانها، مکانها، و... میباشد. شناسایی موجودیتهای نامدار در متن مسئله پیدا کردن این موجودیتها از متن خام و همچنین شناسایی نوع موجودیت است.
برای مثال:
آدولف بورن، طراح، کاریکاتوریست و نقاش در شهر بودجویس از جمهوری چک به دنیا آمد.
> آدولف B-PERSON
>
> بورن I-PERSON
>
> ،
>
> کاریکاتوریست
>
> و
>
> نقاش
>
> در
>
> شهر
>
> بودجویس B-LOCATION
>
> از
>
> جمهوری B-LOCATION
>
> چک I-LOCATION
>
> به
>
> دنیا
>
> آمد
>
> .
در این پژوهش روشهای تضحیص خودکار موجودیتهای نامدار در متن معرفی شده و یکی از آنها برای زبان فارسی پیادهسازی و آزمایش خواهد شد.
# مقدمه
بسم الله ا لرحمن الرحیم
شناسایی موجودیتهای نامدار در پردازش زبان طبیعی به عملیاتی گفته میشود که در طی آن کلیه ی اسامی خاص موجود در متن و متعلق به مقوله های معنایی مختلف،شناسایی و استخراج میگردند و تحت کلاس های از پیش تعریف شده ای مانند اسم افراد ،سازمان ها ،مکان ها و ...
دسته بندی می شوند. در واقع مساله تشخیص موجودیت های نامدار در متن عموما به دو زیر مساله تشخیص و دسته بندی موجودیت ها تقسیم می شود .اسامی خاصی که تشخیص داده میشوند و همچنین قالبی که برای دسته بندی آنها به کار میرود وابسته به
نوع کاربرد آن خواهد بود. در سامانه های تشخیص موجودیتهای اسمی بیشتر روی پیدا نمودن اسامی
اشخاص، مکانها و سازمانهایی که در یک متن معمولی خبری ذکر شده است تمرکز میشود.
هدف ما معرفی روش های تشخیص خودکار موجودیت های نامدار در متن و پیاده سازی یکی از آن روش ها برای زبان فارسی است.
# کارهای مرتبط
در زیر ویژگی هایی که در اغلب سیستم های تشخیص موجودیت های اسمی استفاده می شود را مرور می کنیم. این ویژگی ها را می توان به سه قسمت تقسیم کرد: 1- ویژگی های کلمه ای 2- ویژگی های فهرستی 3- ویژگی های سندی
1- ویژگی های کلمه ای
این ویژگی ها مربوط به نویسه های سازنده ی کلمه است و از روی شکل وظاهر خود کلمه استخراج می گردد . این ویژگی ها توصیف گر حالت کلمه ، نقش کلمه ، حالت عددی و مانند آن است. ویژگی های زیر از این دسته اند :(nadeau and sekine , 2007 (
ویژگی هایی که مربوط به بزرگ یا کوچک بودن حروف در کلمه است ، مانند : 1- شروع کلمه با حروف بزرگ 2- بزرگ بودن تمام حروف در کلمه 3- وجود حروف بزرگ در وسط کلمه مثل eBay
ویژگی های عددی کلمات مانند : الگوی اعداد به کار رفته(استفاده از 2 یا 4 عدد جهت نمایش تاریخ و مانند آن )
ویژگی های نویسه ی کلمات مانند : 1- ضمیر اول شخص 2- ضمیر ملکی 3- حروف یونانی
ویژگی های صرفی کلمات کانند : 1- پسوند 2- پیشوند 3-ریشه ی کلمات
و ...
2- ویژگی های فهرستی
یک سری دیگر از ویژگی هایی که برای کلمات یک جمله در سیستم های NER در نظر گرفته می شود ، ویژگی هاییست که از یک سری فهرست ها استخراج می گردد ؛ برای استخراج این ویژگی ها از فهرست هایی که شامل اسامی افراد ، مکان ها ، شهرها ، کشورها ، افراد و ... است استفاده می شود. وجود کلمه در هر یک از این فهرست ها ، نشان دهنده ی یکی از ویژگی های کلمه است . در بعضی موارد وجود یک کلمه در یک فهرست می تواند با اختمال طبقه ی آن کلمه را مشخص کند . ولی به دلید ابهام در نقش و جایگاه اسامی این امکان وجود دارد که اسمی در یک فهرست قرار داشته باشد ؛ ولی متعلق به طبقه ی آن فهرست نباشد. بزرگ بودن این فهرست ها باعث می شود تا ویژگی هایی با دقت بالاتری استخراج گردد؛ اما در بسیار ی از موارد ، محدودیت وجود دارد که نمی توان از فهرست هایی بزرگ استفاده کرد . به همین دلیل از یک سری روش ها در جستجو استفاده می شود تا فهرست ها بتوانند تعداد کلمات بیشتری پوشش دهند .(nadeau and sekine , 2007 (
3- ویژگی های سندی
این ویژگی ها مربوط به اطلاعاتی ازکلمه است که در کل سند وجو دارد . این اطلاعات از طریق پردازش کل اسناد به دست می آید . واضح است که اگر حجم اسناد و داد های ما زیاد باشد ، ویژگی های قوی تری استخراج می گردد . ویژگی های سندی ، ماورای ساختار کلمه است در واع از یک بررسی آماری از کل سند به دست می آید در ادامه چند نوع از این ویژگی ها رابررسی می کنیم.
- وجود چند شکل از کلمه در سند : اگر یک کلمه در یک سند به چند شکل مختلف ظاهر شود ، مانند : boy و Boy آن گاه می توان نتیجه گرفت که شکل های دیگر کلمه مربوط به مسائل دیگری همچون شروع جمله است ، با استفاده از این نوع ویژگی می توان تا حدی از این ابهامات جلوگیری کرد .
- ویژگی محلی : تعداد تکرار در متن یا پاراگراف ، موقعیت کلمه در متن یا پاراگراف
برای تشخیص موجودیت های نامدار چندین روش وجود دارد :
- روش برمبنای قواعد :
در این روش سعی می شود قالب و شکل کلی موجودیت های اسمی را به صورت یک عبارت با قاعده نمایش داد تا سامانه اسامی خاص را بر مبنای این بارات تشخیص دهد.در واقع در این روش سیستم موجودیت های اسمی را به وسیله ی مولفه هایی که در ظاهر این عبارات ممکن است موجو باش تشخیص می دهد (ویژگی های کلمه ای که در قبل آورده شد. )
شکل ظاهری بعضی از موجودیتهای اسمی را میتوان به صورت یک عبارت باقاعده نمایش داد. برای مثال
نشانی ایمیل را میتوان به صورت عبارت باقاعده ی زیر نوشت
[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z]{2,})
برخی دیگر از موجودیتهای اسمی از قبیل تاریخ، شمارهی تلفن، کد پستی و ... را به صورت عبارات باقاعده
مشخص نموده، به وسیلهی آنها این اسامی را از داخل متن تشخیص داد.
- روش های مبتنی بر واژه نامه
در بسیاری از کاربردها، به نسبت ساده تر میباشد که یک لیست از موجودیتهای اسمی و نوع آنها تهیه شده و
موجودیتهای اسمی داخل متن با استفاده از این لیست تشخیص داده شود. برای مثال، اسامی مکانها در
فرهنگهای جغرافیایی که شامل میلیونها اسم مکان به همراه مشخصات جغرافیایی آن میباشد به عنوان یک
واژه نامه مناسب برای تشخیص اسامی مکانها قابل استفاده است.
در بعضی مواقع، تنها کافی است که به سادگی تمامی عبارات موجود در یک واژه نامه را که در متن ذکر شده اند
پیدا کرد. برای مثال نشریه نیویورک تایمز برای پیاده سازی صفحه سرفصلها ی خود از چنین روشی استفاده
مینماید. در این روش یک واژه نامه ی حاوی اسامی سرفصلها موجود است که به سادگی در هر متنی که یکی از
این اسامی یافت شود، این متن به سرفصل مربوطه ارجاع داده میشود. این رویکرد در بسیاری از موارد به درستی
عمل مینماید ولی در دو صورت با ابهام مواجه خواهد شد. یکی زمانی که واژه ی موجود در واژه نامه به صورت
کامل استفاده نشده باشد؛ مثلا اگر در واژه نامه کلمه ی "وزارت علوم، تحقیقات و فناوری" موجود باشد، این روش
قادر به تشخیص متنی که در آن تنها واژه ی "وزارت علوم" آورده شده است نخواهد بود. مورد دیگر ابهام در این
روش هم زمانی خواهد بود که یک واژه معانی متفاوتی داشته باشد و در واژه نامه به اشتباه به معنی دیگری مرتبط
شود. برای مثال ممکن است واژه ی "هما" در یک متن به عنوان اسم یک شخص استفاده شده باشد اما به اشتباه به
عنوان مخفف "هواپیمایی ملی ایران" تشخیص داده شود.
- روش های آماری :
این روشها غالباً به عنوان روشهای اصلی جهت تشخیص اسامی خاص شناخته میشوند و سایر روشها به عنوان مکمل در کنار آن مورد استفاده قرار میگیرند.
خیلی از مسائل در پردازش زبان های طبیعی را میتوان به صورت مساله های پردازش طبیعی زبان بیان کرد، یعنی بیان احتمال وقوع حالت "الف" با محتوای "ب" که در مساله ما محتوا کلمات یا عبارات هستند .
در این روش ابتدا سامانه به وسیله ی پیکره ای از داده های آموزشی که به صورت دستی و به وسیله ی انسان
برچسب گذاری شده اند آموزش دیده، با یادگیری از طریق این داده ها به تشخیص خودکار اسامی خاص در متن
میپردازد، که در بخش ویژگی های سندی اشاره شد.
برای برچسبزنی داده ی آموزشی از روش برچسبزنی شروع-داخل- خارج استفاده میشود. در این روش، برای تشخیص موجودیتهای اسمی، کلمات متن را تک تک برچسبزنی مینماییم
به این صورت که همزمان با برچسبزنی هم متن را بر اساس کلمات قطعه بندی نموده و هم با برچسبزنی عبارات موجودیت اسمی را مشخص مینماییم.
برای این کار روش های مختلفی چون مدل پنهان مارکوف ،بیشینه بهم ریختگی ،نایو بیر و ...وجود دارد.
"سیستم شناسایی طبقه بندی اسامی فارسی "
در این سیستم یک متن ،به عنوان ورودی به سیستم ارائه می شود و اسامی به تفکیک طبقه ی مربوط به آن به عنوان خروجی سیستم به دست می آید . مراحل لازم جهت شناسایی و طبقه بندی اسامی یک متن عبارتند از :
1- یک متن به عنوان ورودی به سیستم ارائه می شود ، مانند جمله ی : " محمد جمعه به دانشگاه نرفت ."
2- با استفاده از یک نشان گذار ، کلمات در متن ورودی از هم دیگر جدا می شوند. (محمد/جمعه /به/ دانشگاه /نرفت)
3- با استفاده از برچسب زن دستوری نقش دستوری هر کلمه مشخص می شود(محمد/اسم| جمعه/اسم| به /حرف| دانشگاه/اسم| نرفت/فعل)
4- یا استفاده از برچسب دستوری کلمات ، اسامی شناسایی شده و از بقیه ی کلمات متن جدا می شوند .(محمد/جمعه/دانشگاه)
5-برای هر یک از اسامی بردار ویژگی لازم استخراج می شود.
6- با استفاده از یک دسته بند آماری ، اسامی در طبقات مربوطه طبقه بندی می شوند .
- مراحل 2 و 3 را می توان توسط سیستم هضم (پردازش زبان فارسی در پایتون) انجام داد. پس از مرحله 4 باید از داده های برچسب خورده موجود که شامل اسامی هستند ویژگی های لازم جهت تشخیص موجودیت های نامدار استخراج شو د . و پس از این مرحله باید با استفاده از یک طبقه بندی کننده داده های خود را طبقه بندی کنیم .
طبقه کننده های آماری :
-[مدلهای پنهان مارکوف](http://en.wikipedia.org/wiki/Hidden_Markov_model)
مدلهای پنهان مارکوف یکی از قویترین ابزارها برای پردازش سیگنالها میباشند. انواع مختلف مدلهای پنهان
مارکوف علیرغم محدودیتهایی که دارند، هنوز پراستفاده ترین تکنیک در سیستمهای مدرن بازشناسی گفتار و
تشخیص متون هستند. مدل پنهان مارکوف، کل الگوی ورودی را به عنوان یک بردار ویژگی تکی مدل نمیکند،
بلکه رابطه بین بخشهای متوالی یک الگو را استخراج میکند، زیرا هر بخش نسبت به کل ورودی کوچکتر و
.( بنابراین مدلسازی آن ساده تر است (حاجی، 1384
یک مدل پنهان مارکوف را در واقع میتوان یک ماشین حالت محدود احتمالاتی به حساب آورد که هر حالت با
مدل در یک حالت است و با ،t یک تابع تصادفی مرتبط است. فرض میشود که در یک دوره ی گسسته ی از زمان
یک تابع تصادفی از آن حالت یک خروجی تولید میکند. بر مبنای احتمال انتقال حالت جاری، مدل پنهان مارکوف در زمان t+1 تغییر حالت میدهد. دنباله ی حالتهایی که مدل از آن میگذرد معمولا پنهان است، و تنها یک تابع احتمالاتی از آن آشکار است، که مشاهدات تولید شده به وسیله تابع تصادفی مربوط به حالتها است؛ به همین دلیل در نامگذاری این مدلها از صفت پنهان استفاده میشود. در واقع میتوان یک مدل پنهان مارکوف را یک فرآیند تصادفی به طور ناتمام مشاهده شده در نظر آورد. یک مدل پنهان مارکوف با عناصر زیر توصیف میشود:
1- N: تعداد حالتهای مدل
S = {s1,s2,…,sN}-2: مجموعهی حالتها
Π = {π i = P(si at t = 1)}-3: احتمالات حالت اولیه
A = {aij = P(sj at t+1 | si at t)}-4احتمالات تغییر حالت
M-5 :تعداد علائم قابل مشاهده (تولید شده)
V = {v1, v2, ..., vM}-6: مجموعه علائم قابل مشاهده
B = {bi(vk) = P(vk at t | si at t}-7احتمالات تولید علائم قابل مشاهده
Ot t -8: علامت مشاهده شده در زمان
9- T: طول دنباله مشاهدات
λ = (A, B, Π)-10: نماد خلاصهی برای مدل پنهان مارکوف
- [طبقه کننده نایو بیز](http://fa.wikipedia.org/wiki/%D8%AF%D8%B3%D8%AA%D9%87%E2%80%8C%D8%A8%D9%86%D8%AF%DB%8C_%DA%A9%D9%86%D9%86%D8%AF%D9%87_%D9%86%D8%A7%DB%8C%D9%88_%D8%A8%DB%8C%D8%B2)
)
به طور ساده روش بیز روشی برای دسته بندی پدیدهها، بر پایه احتمال وقوع یا عدم وقوع یک پدیدهاست.
براساس ویژگیهای ذاتی احتمال(به ویژه اشتراک احتمال) نایو بیز (به انگلیسی: Naive Bayes classifier) با دریافت تمرین اولیه نتایج خوبی ارایه خواهد کرد. تمرین دادن نایو بیز یک تمرین بانظارت (به انگلیسی: Supervised learning) است.
برای نمونه یک میوه ممکن است پرتغال باشد. اگر نارنجی و کروی با شعاع حدود ده سانتی متر باشد. اگر این احتمالات به درستی به همدیگر وابسته باشند نایو بیز در تخشیص اینکه این میوه پرتغال است یا نه بدرستی عمل خواهد کرد.
برنامههای کاربردی بسیاری هستند که پارامترهای نایو بیز را تخمین میزنند، بنابر این افراد بدون سروکار داشتن با تئوری بیز میتوانند از این امکان به منظور حل مسایل مورد نظر بهره ببرند. با وجود مسایل طراحی و پیش فرضهایی که در خصوص روش بیز وجود دارد، این روش برای طبقه بندی کردن بیشتر مسایل در جهان واقعی، مناسب است.
# آزمایشها-[میدان تصادفی شرطی (CRF)](http://blog.echen.me/2012/01/03/introduction-to-conditional-random-fields/)
این مدل بیشتر برای تشخیص الگو (pattern recognition)و آموزش ماشین (machine learning) به کار گزفته میشود . به خصوص در کارهایی چون برچسب زنی (labelling ) و پارس کردن (parsing) در نتیجه برای مساله ما که از دسته ی مسائل برچسب زنیست بسیار مناسب می باشد . ایده ی کلی آن برچسب زنی با توجه به برچسبهای همسایه است . مثلا در مساله ما برای انتخاب برچسب یک توکن برچسبهای توکن های قبلی را نیز مد نظرر قرار می دهیم.
راه حل ما استفاده از sequential tagger های کتابخانه nltk هستند که برمبنای الگوریتم مدل های پنهان مارکوف کار می کند. و در قسمت آزمایش ها معرفی خواهد شد.
# آزمایشها
در واقع مساله ما به صورت خلاصه این است که هر متنی را دریافت کنیم و به صورت BIO برچسب بزنیم. برچسب زنی BIO به این شکل است که هر کلمه در متن دارای برچسبیست . برچسب B به معنای شروع حوزه ی مورد نظر شماست ، I یعنی کلمه داخل حوزه مورد نظر قرار دارد و
O یعنی کلمه داخل حوزه مورد نظر نیست. حوزه مورد نظر مساله ما موجودیت های نامدار است . در این مساله علاوه بر چسبهای Bو I مشخص میکنیم که این کلمه از کدام دسته شخص (PER) ، مکان (LOC) و یا سازمان (ORG)است . (به عنوان مثال مجلس/B-ORG) .
بخشی از داده های فارسی که آموزش توسط آن انجام شده ، هر کلمه به همراه برچسب آن در یک خط قرار دارد:
اولین O
سیاره O
خارج O
از O
منظومه B-LOC
شمسی I-LOC
دیده O
شد O
هر متنی که به برنامه می دهیم نیز باید به همین شکل برچسب بخورد .
برای این کار ما از کتابخانه[NLTK](http://www.nltk.org/)پایتون استفاده کردیم . این کتابخانه خودش شامل یکسری برچسب زن است . ما برای کار خود از[Sequential Tagger ](http://www.inf.ed.ac.uk/teaching/courses/icl/nltk/tagging.pdf)های این کتابخانه استفاده کردیم . ما توابع Ngram این برچسب زن را توسط داده های فارسی که به صورت دستی برچسب خورده بودند آموزش دادیم. این داده ها شامل 201508 کلمه فارسی برچسب خورده بودند.که برچسب زن توسط 90% از آنها آموزش دید و 10% باقی مانده هم برای ارزیابی برچسب زن استفاده شدند.
برچسب زن ساخته شده از سه برچسب زن UnigramTagger , BigramTagger, TrigramTagger استفاده می کند . نحوه ی کار یک NgramTagger به این صورت است که در وقت آموزش دیدن هر توکن را به همراه n-1 برچسب قبلیش نگهداری می کند سپس در هنگام برچسب زدن برای هر توکن با بررسی برچسب های قبلیش برچسب مناسب را به آن اختصاص می دهد. بدیهیست UnigramTagger تنها توکن را نگهداری می کند وهنگام برچسب زدن اگر توکنی دید که در هنگام آموزش دیده بود ، همان برچسب را به آن اختصاص می دهد. وگرنه برچسب NONE را به آن می دهد. برای بهبود کارایی و جلوگیری از توکن های NONE از برچسب زن DefaultTagger استفاده کردیم . نحوه کار این برچسب زن به این صورت است که به تمام توکنها یک برچسب واحد اختصاص می دهد که در مساله ما برچسب O این برچسب واحد است. همین کار نتیجه را از 89% به 95% رساند. برنامه فایل داده های فارسی را دریافت می کند ، داده های آزمایشی و آموزشی را جدا می کند ، توسط دا ده های آموزشی آموزش می بیند و سپس هر متنی که به آن داده شود را برچسب زنی می کند و در فایل دیگری می نویسد.
برای ارزیابی کار از تابع nltk خود پایتون استفاده شد. نحوه کار این تابع به این صورت است که یک متن برچسب خورده را دریافت می کند ، برچسبهای آن را حذف می کند و خودش دوباره آن را توسط برچسب زن خودمان برچسب می زند سپس با مقایسه این دو امتیاز دقت برچسب زن به دست می آید.که درباره راه حل پیاده سازی شده ما 95% بود . یعنی متن برچسب خورده توسط سیستم 95% مشابه داده ی برچسب خورده اولیه بود.
تابع برجسب زنی که ساختیم ابتدا متن را توسط DefaultTagger برچسب می زند سپس از UnigramTagger استفاده می کند و سپس نتایج را به ترتیب توسط BigramTagger و TrigramTagger بهبود می بخشد.
ترتیب های مختلفی را برای این سه NgramTagger امتحان کردیم که ترتیب Unigram, Biagram , Trigram از همه بهتر بود گرچه اختلاف همه در حد نهایتا 1% بود.
لینک برنامه :[tagger](https://gist.github.com/h-alg/9f4de0e1b5c0a5a9f9e6)
# کارهای آینده
# مراجع
+ Jurafsky, Daniel, and James H. Martin. 2009. Speech and Language Processing: An Introduction to Natural Language Processing, Speech Recognition, and Computational Linguistics. 2nd edition. Prentice-Hall.
+ Nadeau, David, and Satoshi Sekine. "A survey of named entity recognition and classification." Lingvisticae Investigationes 30.1 (2007): 3-26.
+ M. Asgari Bidhendi, et al., "Extracting person names from ancient Islamic Arabic texts", in Proceedings of LREC-Rel, pp. 1-6, 2012.
+ [پونه سادات مرتضوی، مهرنوش شمس فرد، "شناسایی موجودیت های نام دار در متون فارسی"، پانزدهمین کنفرانس بین المللی سالانه انجمن کامپیوتر ایران، 1388](http://bayanbox.ir/id/8409837300197780588)
+ [مجید عسگری بیدهندی، ساخت چارچوبی برای استخراج خودکار نام اشخاص از متن. مورد مطالعه:زبان عربی، پایاننامه کارشناسی ارشد، دانشگاه علم و صنعت ایران، 1390](http://bayanbox.ir/id/6445014877732296637)
+ [Named Entity Recognition with NLTK](http://nltk.org/book/ch07.html#named_entity_recognition_index_term)
+ [Stanford Named Entity Recognizer(NER)](http://nlp.stanford.edu/software/CRF-NER.shtml)
+ [دستهبندی کننده نایو بیز](http://fa.wikipedia.org/wiki/%D8%AF%D8%B3%D8%AA%D9%87%E2%80%8C%D8%A8%D9%86%D8%AF%DB%8C_%DA%A9%D9%86%D9%86%D8%AF%D9%87_%D9%86%D8%A7%DB%8C%D9%88_%D8%A8%DB%8C%D8%B2)
+ [سیستم شناسایی و طبقه بندی اسامی در متون فارسی](http://www.sid.ir/FA/VEWSSID/J_pdf/35213891306.pdf)
+ [Efficient Support Vector Classifiers
for Named Entity Recognition](http://delivery.acm.org/10.1145/1080000/1072282/p54-isozaki.pdf?ip=151.243.10.234&id=1072282&acc=OPEN&key=4D4702B0C3E38B35.4D4702B0C3E38B35.4D4702B0C3E38B35.6D218144511F3437&CFID=446233081&CFTOKEN=76552105&__acm__=1398446503_5a3a37f41038583a804eef651346723c)
+ [Focused Named Entity Recognition using Machine
Learning](http://stat.rutgers.edu/home/tzhang/papers/sigir04-focusedentity.pdf)
+ [امکان سنجی سیستم طبقه بندی متون برای زبان فارسی](http://www.arooz.net/attachments/059_22-TextClassification.pdf)
+ [برچسبگذار مبتنی بر مدل مخفی مارکوف (Hidden Markov Model)](http://old.rahavardnoor.com/modules.php?name=archive&pa=showarticl&id=659)
+ [Conditional random field](http://en.wikipedia.org/wiki/Conditional_random_field)
# پیوندهای مفید
+ [تشخیص موجودیتهای نامدار، پروژه درس هوش مصنوعی نیمسال دوم ۸۹-۸۸ دانشگاه علم و صنعت](http://bayanbox.ir/id/6189680504542343855?download)
+[تشخیص موجودیتهای اسمی در متن، پروژه درس هوش مصنوعی نیمسال اول ۹۲-۹۱ دانشگاه علم و صنعت](http://bayanbox.ir/id/1685090304266467232?download)
+ [سیستم شناسایی و طبقه بندی اسامی در متون فارسی](http://www.sid.ir/FA/VEWSSID/J_pdf/35213891306.pdf)
+ [پردازش زبان فارسی در پایتون](http://www.sobhe.ir/hazm)
+ [کتابخانه ابزار یادگیری ماشین برای پایتون](http://scikit-learn.org/stable/)
+ [Named Entity Recognition with NLTK](http://nltk.org/book/ch07.html#named_entity_recognition_index_term)
+ [Stanford Named Entity Recognizer(NER)](http://nlp.stanford.edu/software/CRF-NER.shtml)
+ [Named Entity Recognition with
Combinations of Conditional Random Fields](http://pub.uni-bielefeld.de/luur/download?func=downloadFile&recordOId=2603451&fileOId=2624520)
+ [دسته بندی اسناد فارسی با استفاده از الگوریتمknn](http://engold.ui.ac.ir/~basiri/papers/bargh.pdf)
+ [Named Entity Recognition Using Hidden Markov Model](http://www.ijarcsse.com/docs/papers/Volume_3/4_April2013/V3I4-0462.pdf)
+ [سایت برچسب گذار](http://textmining.noorsoft.org/FA/PersianPOSTagger.html)
+ [python nltk](http://www.nltk.org/)
+ [python NLTK book ](http://www.nltk.org/book/ch07.html)