دوستان عزیز برای پیدا کردن سریع مطالب مورد نظر خود، می توانید از قسمت جستجوی سریع در سایت، یک یا چند کلمه کلیدی مورد نظر خود را جستجو نمایید.
یا اینکه بر روی دو آیکون سبز رنگ "طبقه بندی موضوعات" یا "جستجوی کلمات کلیدی" در سمت راست و چپ موجود در بالای سایت کلیک نمایید...
در صورت بروز مشکل در پرداخت الکترونیکی؛ میتونید ایمیلی ، پیامکی، تلفنی یا تلگرامی بگید تا فایلتون براتون ارسال بشه.
نحوه استفاده از wordnet در برنامه هاي جاوا | تعاونی نیرومندسازی تحقیقات
طبقه بندی موضوعات
جستجوی کلمات کلیدی
شنبه , ۱۳ آذر ۱۳۹۵
آخرین مطالب
خانه -> پردازش متن -> شبکه واژگان -> نحوه استفاده از wordnet در برنامه های جاوا

نحوه استفاده از wordnet در برنامه های جاوا

دراین گزارش فنی تلاش داریم شما را با چگونگی دسترسی به خدمات wordnet از محیط جاوا آشنا نماییم . آموزش این مساله از مرحله نصب نسخه آفلاین wordnet آغاز شده و تا مرحله کد نویسی یک نمونه ساده ادامه می یابد.

 

گام اول: دانلود و نصب WordNet

برای دریافت یک نسخه از برنامه WordNet (شامل دیکشنری لغات و یک مرورگر ساده) به اینجا مراجعه نمایید.
فرض کنیم سیستم عامل شما ویندوز باشد، برنامه WordNet را نصب کنید. فرض کنیم این برنامه را در آدرس زیر نصب کرده اید.
C:\Program Files\WordNet\

 

اگر نسخه WordNet شما برابر k باشد، در آدرس بالا یک شاخه با نام k وجود خواهد داشت. بعنوان مثال اگر نسخه WordNet شما ۲.۱ باشد، در آدرس فوق، شاخه ای با نام ۲.۱ وجود خواهد داشت. در داخل این شاخه، یک شاخه با نام dict قرار دارد که در واقع دیکشنری لغات WordNet در آنجا قرار دارد.
 با نصب این برنامه، یک مرورگر ساده نیز بر روی سیستم شما نصب می شود که امکان browse کردن دیکشنری WordNet را فراهم می کند. تصویر این مرورگر در زیر نمایش داده شده است.

ما در اینجا به این موضوع نمی پردازیم.
گام دوم: نوشتن یک برنامه برای تعامل با دیکشنری WordNet

برای این کار باید از API هایی که بدین منظور پیاده سازی شده اند، استفاده نماییم. خوشبختانه چند مورد API خوب برای کار با WordNet در جاوا، موجود می باشد. البته چنین API هایی برای زبانهای مختلفی موجود می باشد. برای نمونه می توانید برخی از این موارد را در اینجا بیابید.
برخی از نمونه API های WordNet که برای زبان جاوا ایجاد شده اند:
طبیعتا این API ها در واسطها، متدها و امکاناتی که ارائه می دهند، و همچنین از این نظر که چه نسخه ای از WordNet را پشتیبانی می کنند با هم تفاوت هایی دارند. شما می توانید با بررسی هر یک از آنها، موردی را انتخاب کنید که با آن راحتتر هستید. دراینجا من از مورد آخر استفاده می کنم.
بنابراین فرض بر این است که JWI را دانلود کرده اید.
بعنوان مثال نسخه ۲.۱.۵ را. در نتیجه شما باید فایل edu.mit.jwi_2.1.5.jar را داشته باشید.
قبل از اینکه وارد کد نویسی شویم، باید متغیرهای محیطی (Environmental Variables) لازم را تنطیم نمایید. بدین منظور، یک متغیر محیطی با نام WNHOME ایجاد نمایید که مقدار آن برابر آدرس شاخه ای است که WordNet را در آن نصب کرده اید، مثلا
 C:\Program Files\WordNet\2.1
(البته ایده استفاده از متغیرهای محیطی، اختیاری است و در صورت عدم استفاده از آن، می توانید در داخل کد، بطور صریح آدرس مذکور را وارد نمایید.)
کار ما با دیکشنری WordNet شامل ۳ قسمت است: اتصال به دیکشنری، استفاده از دیکشنری، بستن دیکشنری.
برای اتصال به دیکشنری WordNet که بر روی سیستم خود نصب کرده ایم، باید یک شیء از کلاس Dictionary که در پکیج edu.mit.jwi تعریف شده است، ایجاد نماییم. در واقع، کلاس Dictionary، یک interface با نام IDictionary را پیاده سازی می کند که آن هم در پکیج edu.mit.jwi تعریف شده است. سپس با استفاده از متد open این شیء، دیکشنری را باز می کنیم.
قطعه کد زیر قالب کلی برنامه را نشان می دهد:

import edu.mit.jwi.*;
import java.io.File;
import java.io.IOException;
import java.net.URL;public class Test {

  public static void main(String[] args) {
    try {
//construct a URL to the WordNet dictionary
String wnHome = System.getenv(“WNHOME”);
String path = wnHome + File.separator + “dict”;
URL url = new URL(“file”, null, path);//create a dictionary object and open it
Dictionary dictionary = new Dictionary(url);
dictionary.open();

//now use the dictionary

//close the dictionary
dictionary.close();

    } catch(IOException e) {
      e.printStackTrace();
    }
  }
}
در ابتدا، با استفاده از متد getenv، مقدار متغیر محیطی WNHOME را بازیابی کرده و مسیر دیکشنری WordNet نصب شده بر روی سیستم را تعیین نموده ایم. دقت شود که از File.separator بمنظور افزایش قابلیت حمل برنامه استفاده نموده ایم، چرا که بعنوان مثال در ویندوز در نوشتن آدرس فایلها از \ و در لینوکس از / استفاده می شود. در نتیجه بجای اینکه از یکی از این کاراکتر ها استفاده نماییم (که درنتیجه برنامه ما محدود به یکی از سیستم عاملها می شد) از ثابت File.separator استفاده کرده ایم که مقدار مناسب را استفاده می نماید. سپس با استفاده از آدرس این دیکشنری (path)، یک URL ایجاد کرده ایم (نوع پروتکل این URL را هم برابر file قرار داده ایم)
در ادامه، یک شیء از کلاس Dictionary ایجاد کرده ایم. برای این کار از سازنده ای استفاده کرده ایم که بعنوان پارامتر ورودی، URL دیکشنری مورد نظر را می گیرد.
سپس با استفاده از متد open، دیکشنری را باز کرده ایم. پس از استفاده از دیکشنری، آن را مجددا بسته ایم، با استفاده ازمتد close.

حالا با افزودن قطعه کدی، از دیکشنری ای که ان را باز کرده ایم، استفاده می کنیم.
پیدا کردن معانی یک کلمه در قالب تعریف آن کلمه

فرض کنید می خواهیم ببینیم تعریف کلمه Java چیست. می دانیم که یک کلمه ممکن است دارای معانی متفاوتی باشد. بعنوان مثال، کلمه Java هم به معنای قهوه می باشد، هم به یک زبان برنامه نویسی شیء گرا اشاره دارد، و هم نام یک جزیره در اندونزی می باشد. (جالب است بدانید که علت استفاده از کلمه Java برای قهوه این است که در زمانهای گذشته، یک منبع خوب قهوه، همین جزایر جاوه (Java) در اندونزی بوده اند).
از آنجا که کلمه Java دارای ۳ معنای متفاوت است، در واقع می توان اینطور در نظر گرفت که این کلمه، ۳ بار در دیکشنری ذکر شده است و در هر بار هم، بهمراه مجموه ای از کلمات مترادف با آن ذکر شده است. لازم به ذکر است که کلمه Java اگرچه ۳ بار در دیکشنری ذکر شده است، اما دارای یک اندیس واحد می باشد. بنابراین برای استخراج معانی مختلف یک کلمه، ابتدا باید اندیس آن کلمه را در دیکشنری پیدا کنیم، سپس هر یک از ۳ وقوع آن کلمه را پیدا کنیم (که هر یک از آنها هم یک id یکتا دارند) و سپس برای هر وقوع، مجموعه کلمات مترادف را بازیابی کرده و توضیح ارائه شده برای آن مجموعه را استفاده نماییم. کلمه Java دارای یک اندیس، ۳ وقوع، و ۳ مجموعه کلمات مترادف می باشد. البته برای کلمه java، این مجموعه های کلمات مترادف، خیلی محدود هستند. معنای اول کلمه Java (قهوه) دارای مترادف هایی نظیر نوشیدنی می باشد. معنای دوم کلمه Java (زبان برنامه نویسی) دارای مترادف خاصی نیست. معنای سوم Java (نام جزیره) نیز دارایمترادف خاصی نیست.
با استفاده از برنامه زیر می توانیم تعریف هایی که از کلمه Java در دیکشنری WordNet وجود دارد را استخراج و چاپ نماییم. (خطوط ضخیم، دستوراتی را مشخص می کنند که به برنامه قبلی افزوده شده اند)
import edu.mit.jwi.*;
import edu.mit.jwi.item.*;
import java.util.List;

import java.io.File;
import java.io.IOException;
import java.net.URL;
public class Test {
  public static void main(String[] args) {
    try {
//construct a URL to the WordNet dictionary
String wnHome = System.getenv(“WNHOME”);
String path = wnHome + File.separator + “dict”;
URL url = new URL(“file”, null, path);//create a dictionary object and open it
Dictionary dictionary = new Dictionary(url);
dictionary.open();

       IIndexWord index = dictionary.getIndexWord(“java”, POS.NOUN);
if(index==null) return;
List<IWordID> wordIds = index.getWordIDs();
for (int i = 0; i < wordIds.size(); i++) {
IWordID wordId = wordIds.get(i);
IWord word = dictionary.getWord(wordId);
ISynset synonyms = word.getSynset();
System.out.println(“====================”);
System.out.println(synonyms.getGloss());
}

//close the dictionary
dictionary.close();

    } catch(IOException e) {
      e.printStackTrace();
    }
  }
}

 

در قطعه کد بالا، ابتدا اندیس کلمه java را در دیکشنری بازیابی کرده ایم. سپس با استفاده از اندیس آن، کلمه مربوطه را بدست آورده ایم. سپس با استفاده از این کلمه، id های مربوط به وقوع های (عجب عبارتی!!!) این کلمه را بدست آورده ایم. سپس با استفاده از این id ها، خود کلمات را استخراج کرده و سپس برای هر یک از این کلمات، مجموعه مترادف آن را گرفته ایم و توضیح ارائه شده برای این مجموعه ها را بعنوان تعریف کلمه مذکور، استخراج کرده و چاپ کرده ایم.
یک نکته دیگر هم قابل توجه است و آن این است که در همان اول کار، برای بازیابی اندیس کلمه Java، از POS.NOUN استفاده کرده ایم. این بدان معناست که می خواهیم Java را بعنوان یک Noun (اسم) جستجو کنیم و نه مثلا بعنوان یک فعل.
(POS: part of speech). بعنوان مثال، کلمه set هم بعنوان نام و هم بعنوان فعل می تواند مورد جستجو قرار گیرد که طبیعتا نتایج متفاوتی ایجاد خواهد شد.
خروجی قطعه کد فوق چنین چیزی خواهد بود:

====================
an island in Indonesia south of Borneo; one of the world’s most densely populated regions
====================
a beverage consisting of an infusion of ground coffee beans; “he ordered a cup of coffee”
====================
a simple platform-independent object-oriented programming language used for writing applets that are downloaded from the World Wide Web by a client and run on the client’s machine

پیدا کردن کلمات مترادف یک کلمه (synonyms)

با افزودن تکه کد کوتاهی، می توانیم علاوه بر استخراج معانی کلمه Java، کلمات مترادف آن را هم بازیابی و چاپ کنیم. بنابراین در قطعه کد زیر، پس از استخراج مجموعه کلمات مترادف، کلمات موجود در هر یک از این مجموعه ها را چاپ می کنیم.

 

import edu.mit.jwi.*;
import edu.mit.jwi.item.*;
import java.util.List;
import java.io.File;
import java.io.IOException;
import java.net.URL;
public class Test {
  public static void main(String[] args) {
    try {
//construct a URL to the WordNet dictionary
String wnHome = System.getenv(“WNHOME”);
String path = wnHome + File.separator + “dict”;
URL url = new URL(“file”, null, path);//create a dictionary object and open it
Dictionary dictionary = new Dictionary(url);
dictionary.open();

IIndexWord index = dictionary.getIndexWord(“java”, POS.NOUN);
if(index==null) return;
List<IWordID> wordIds = index.getWordIDs();
for (int i = 0; i < wordIds.size(); i++) {
IWordID wordId = wordIds.get(i);
IWord word = dictionary.getWord(wordId);
ISynset synonyms = word.getSynset();
System.out.println(“====================”);
System.out.println(synonyms.getGloss());
}

       int synonymCount = synonyms.getWords().size();
for (int j = 0; j < synonymCount; j++) {
IWord synonymWord = synonyms.getWord(j + 1);
System.out.println(“\t” + synonymWord.getLemma());
}
 

      //close the dictionary
dictionary.close();
    } catch(IOException e) {
      e.printStackTrace();
    }
  }
}

 

در قطعه کد فوق، با استفاده از مجموعه کلمات مترادف، کلمات مترادف را بازیابی کرده و برای هر کلمه، ریشه لغوی آن را چاپ کرده ایم. (با استفاده از متد getLemma). یک نکته قابل توجه آن است که در فراخوانی متد getWord، از j+1 استفاده کرده ایم و نه از j. علت آن است که بر خلاف آنچه انتظار داریم، ورودی این تابع از ۱ شروع می شود و نه از صفر (در واقع پارامتر ورودی، اندیس نیست بلکه از جنس شماره است).
خروجی قطعه کد فوق چنین خواهد بود:

 

====================
an island in Indonesia south of Borneo; one of the world’s most densely populated regions
Java
====================
a beverage consisting of an infusion of ground coffee beans; “he ordered a cup of coffee”
coffee
java
====================
a simple platform-independent object-oriented programming language used for writing applets that are downloaded from the World Wide Web by a client and run on the client’s machine
Java

 

یعنی معنای اول کلمه Java،، دارای یک مجموعه مترادف، شامل کلمه Java می باشد. معنای دوم کلمه java، دارای یک مجموعه مترادف شامل دو کلمه coffee و java می باشد. همچنین معنای سوم کلمه Java، دارای یک مجموعه مترادف شامل یک کلمه Java می باشد.

پیدا کردن Hypernym های یک کلمه

کلمه Y را hypernym کلمه X به حساب می آوریم به شرطیکه هر نمونه X، یک نمونه Y هم باشد. بعنوان مثال، هر “قهوه”، یک “نوشیدنی” می باشد. در نتیجه کلمه “نوشیدنی” یک Hypernym برای کلمه “قهوه” می باشد.
در اینجا می خواهیم Hypernym های کلمه Java را بدست اوریم. طبیعی است که باز هم از آنجا که این کلمه دارای ۳ معنای متفاوت می باشد، باید برای هر یک از معنای، مجموعه کلمات مترادف را بازیابی کرده و سپس Hypernym های هر یک از این مجموعه مترادف ها را بازیابی نماییم.
قطعه کد زیر توسعه یافته قطعه کد بالا می باشد که Hypernym های کلمه Java را نیز چاپ می کند.
import edu.mit.jwi.*;
import edu.mit.jwi.item.*;
import java.util.List;
import java.io.File;
import java.io.IOException;
import java.net.URL;
public class Test {
  public static void main(String[] args) {
    try {
//construct a URL to the WordNet dictionary
String wnHome = System.getenv(“WNHOME”);
String path = wnHome + File.separator + “dict”;
URL url = new URL(“file”, null, path);//create a dictionary object and open it
Dictionary dictionary = new Dictionary(url);
dictionary.open();

IIndexWord index = dictionary.getIndexWord(“java”, POS.NOUN);
if(index==null) return;
List<IWordID> wordIds = index.getWordIDs();
for (int i = 0; i < wordIds.size(); i++) {
IWordID wordId = wordIds.get(i);
IWord word = dictionary.getWord(wordId);
ISynset synonyms = word.getSynset();
System.out.println(“====================”);
System.out.println(synonyms.getGloss());
}

       int synonymCount = synonyms.getWords().size();
for (int j = 0; j < synonymCount; j++) {
IWord synonymWord = synonyms.getWord(j + 1);
System.out.println(“\t” + synonymWord.getLemma());
}
       List<ISynsetID> hypernymWordIds =
                  synonyms.getRelatedSynsets(Pointer.HYPERNYM);
for(int j=0; j<hypernymWordIds.size(); j++) {
List<IWord> hypernymWords =
                  dictionary.getSynset(hypernymWordIds.get(j)).getWords();
for(int k=0; k<hypernymWords.size(); k++)
System.out.println(“\t\t\t>>” + 

                        hypernymWords.get(k).getLemma());
}

      //close the dictionary
dictionary.close();
    } catch(IOException e) {
      e.printStackTrace();
    }
  }
}
لازم به ذکر است که برای بازیابی Hypernym ها را از متد getRelatedSynsets استفاده کرده ایم و مقدار Poinrt.HYPERNYM را به آن پاس داده ایم. با استفاده از آرگومانهای مختلف می توانیم کلماتی را که روابط متفاوتی با کلمه مورد نظر دارند (مثلا با استفاده از Pointer.HYPONYM می توانیم کلماتی را که Hyponym کلمه مورد نظر می باشند) را بازیابی کنیم.
توجه کنید که متد getRelatedSynset را روی یک شیء از نوع ISynset فراخوانی کرده ایم. در واقع کلمات در WordNet در قالب یکسری مجموعه کلمات مترادف (synset) سازماندهی شده اند که بین مجموعه کلمات مترادف، روابط متفاوتی برقرار است. در اینجا ما می خواستیم مجموعه مترادفهایی را که نسبت به هر یک از مجموعه مترادف های کلمه Java، hypernym می باشند را بدست آوریم. (کلمه Java عضو ۳ مجموعه مترادف می باشد)
خروجی کد بالا بدین ترتیب است:
====================
an island in Indonesia south of Borneo; one of the world’s most densely populated regions
Java
====================
a beverage consisting of an infusion of ground coffee beans; “he ordered a cup of coffee”
coffee
java
>>beverage
>>drink
>>drinkable
>>potable
====================
a simple platform-independent object-oriented programming language used for writing applets that are downloaded from the World Wide Web by a client and run on the client’s machine
Java
>>object-oriented_programming_language
>>object-oriented_programing_language
توضیح آن بدین ترتیب است که
  • Java در معنای اول (نام جزیره) دارای هیچ Hypernym نمی باشد.
  • Java در معنای دوم (قهوه) دارای چهار hypernym می باشد.
  • Beverage، drink، drinkable و potable
  • Java در معنای سوم (یک زبان برنامه نویسی) دارای دو hypernym می باشد.
  • Object-oriented programming language
  • Object-oriented programing language

 

کاربر گرامی

برای دانلود فایل های مورد نظرتان بایستی بر روی دکمه "افزودن به سبد خرید" کلیک نمایید .

پس از چند ثانیه ، فایل مورد نظر شما به سبد خریدتان اضافه گردیده و این دکمه تبدیل به دکمه "پرداخت" خواهد شد.

با کلیلک بر روی دکمه "پرداخت" ، وارد صفحه پرداخت خواهید شد .

با وارد کردن اطلاعات و ایمیل خود ، فایل مورد نظر به ایمیل شما ارسال گردیده و همچنین لینک دانلود فایل بلافاصله برایتان به نمایش درخواهد آمد.

– قابل پرداخت با تمام کارتهای بانکی + رمز دوم

– پشتیبانی سایت ۰۹۳۵۹۵۲۹۰۵۸ – Info@tnt3.ir – universitydatainfo@yahoo.com




سفارش ترجمه متون عمومی و تخصصیفروشگاه اینترنتی کتاب - خرید آنلاین کتاب - دانلود کتاب الکترونیکی

جوابی بنویسید

ایمیل شما نشر نخواهد شد

بیست − یک =

شما می‌توانید از این دستورات HTML استفاده کنید: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>


This site is using the Seo Wizard plugin by http://seo.uk.net/