PA2_v1.pdf

‫ﺑﺎﺳﻤﻪ ﺗﻌﺎﻟ‬
‫ﺑﺎزﯾﺎﺑﯽ ﭘﯿﺸﺮﻓﺘﻪی اﻃﻼﻋﺎت‬
‫‪Modern Information Retrieval‬‬
‫داﻧﺸ ﺪهی ﻣﻬﻨﺪﺳ ﮐﺎﻣﭙﯿﻮﺗﺮ‬
‫ﭘﺮوژهی دوم‬
‫)ﻧﺴﺨﻪی ‪(١‬‬
‫ﻣﺪرس‪ :‬دﮐﺘﺮ ﺳﻠﯿﻤﺎﻧ‬
‫ﻣﻮﻋﺪ ﺗﺤﻮﯾﻞ‪ :‬ﺳﺎﻋﺖ ‪ ۴‬ﺻﺒﺢ‪ ،‬ﺷﻨﺒﻪ‪ ١۶ ،‬آذر ‪١٣٩٢‬‬
‫• اﯾﻦ ﻓﺎز اﻧﻔﺮادی اﺳﺖ‪.‬‬
‫• ﺑﻪ ازای ﻫﺮ روز ﺗﺄﺧﯿﺮ )ﺣﺪاﮐﺜﺮ ‪ ٧‬روز( در ﺗﺤﻮﯾﻞ ﭘﺮوژه ‪ ١٠٪‬از ﻧﻤﺮهی ﺑﺎﻗ ﻣﺎﻧﺪهی آن ﮐﺎﺳﺘﻪ ﺧﻮاﻫﺪ ﺷﺪ‪.‬‬
‫• ﺻﻮرت ﭘﺮوژه و ﺿﻤﯿﻤﻪﻫﺎ ﺑﺮای زﺑﺎن ‪ Java‬آﻣﺎده ﺷﺪه‪.‬‬
‫• ﺑﺮﺧ از اﺑﺰارﻫﺎﯾﯽ ﮐﻪ در اﯾﻦ ﭘﺮوژه ﺑﺎ آنﻫﺎ آﺷﻨﺎ ﻣ ﺷﻮﯾﺪ‪ ،‬در ﭘﺮوژهﻫﺎی ﺑﻌﺪی ﻧﯿﺰ اﺳﺘﻔﺎده ﺧﻮاﻫﻨﺪ ﺷﺪ‪.‬‬
‫• رؤﯾﺖ ﺗﻘﻠّﺐ ﻣﻮﺟﺐ ﮐﺴﺮ دو ﺑﺮاﺑﺮ ﻧﻤﺮهی اﯾﻦ ﻓﺎز از ﻫﺮ دو ﻃﺮف ﺧﻮاﻫﺪ ﺷﺪ‪.‬‬
‫‪ ١‬ﻫﺪف‬
‫اﮐﺜﺮ ﻧﺮماﻓﺰارﻫﺎﯾﯽ ﮐﻪ ﺑﺎ ﺣﺠﻢ »ﺑﯿﺶ از ﮐﻢ« از دادهﻫﺎ ﮐﺎر ﻣ ﮐﻨﻨﺪ‪ ،‬ﻧﯿﺎزﻣﻨﺪ اﺳﺘﻔﺎده از داﻧﺶ ﺑﺎزﯾﺎﺑﯽ اﻃﻼﻋﺎت ﺟﻬﺖ ﺗﺴﻬﯿﻞ‬
‫و ﺗﺴﺮﯾﻊ دﺳﺘﺮﺳ ﻫﺎ ﻫﺴﺘﻨﺪ؛ و ﻻزم ﻧﯿﺴﺖ ﺣﺘﻤﺎً ﮔﻮﮔﻞ ﺑﺎﺷﯿﺪ ﺗﺎ اﯾﻦ ﻧﯿﺎز را ﺣﺲ ﮐﻨﯿﺪ!‬
‫ﻫﺪف اﯾﻦ ﭘﺮوژه‪ ،‬آﺷﻨﺎﯾﯽ ﺑﺎ ﮐﺘﺎﺑﺨﺎﻧﻪی ‪ Lucene‬ﺑﻪ ﻋﻨﻮان ﯾ‬
‫از ﮔﺰﯾﻨﻪﻫﺎی ﻣﻮﺟﻮد ﺑﺮای ﺑﺎزﯾﺎﺑﯽ اﻃﻼﻋﺎت اﺳﺖ‪ ،‬ﮐﻪ ﻋﻠ رﻏﻢ‬
‫ﻣﺘﻦﺑﺎز و راﯾ ﺎن ﺑﻮدن‪ ،‬در ﺑﺴﯿﺎری از ﺷﺮﮐﺖﻫﺎی ﺑﺰرگ دﻧﯿﺎ ﺑﻪ ﻋﻨﻮان راهﮐﺎری ﻣﺆﺛّﺮ اﺳﺘﻔﺎده ﻣ ﺷﻮد‪.‬‬
‫‪٢‬‬
‫‪١.٢‬‬
‫ﻣﻘﺪﻣﺎت‬
‫‪Maven‬‬
‫‪ Maven‬ﯾ‬
‫اﺑﺰار ‪ build automation‬اﺳﺖ‪ .‬در اﯾﻦ ﭘﺮوژه‪ ،‬از آن ﺑﯿﺸﺘﺮ ﺟﻬﺖ ﻣﺪﯾﺮﯾﺖ ‪dependency‬ﻫﺎ اﺳﺘﻔﺎده ﻣ ﮐﻨﯿﻢ‪.‬‬
‫در ﺻﻮرت ﻧﯿﺎز ﺑﻪ ﻫﺮ ﮐﺘﺎﺑﺨﺎﻧﻪای‪ ،‬از ﻗﺮار دادن آن در »ﮐﻨﺎر« ﮐﺪﻫﺎی ﺧﻮدﺗﺎن ﺧﻮدداری ﮐﻨﯿﺪ؛ در ﻋﻮض اﻃﻼﻋﺎت ﻣﺮﺑﻮﻃﻪ را‬
‫ﺑﻪ ﻓﺎﯾﻞ ﺗﻨﻈﯿﻤﺎت ﭘﺮوژه )‪ (pom.xml‬اﺿﺎﻓﻪ ﮐﻨﯿﺪ‪ .‬ﺧﻮدِ ‪ Maven‬ﮐﺘﺎﺑﺨﺎﻧﻪ را از ﯾ‬
‫ﺑﻪ اﯾﻦ ﺗﺮﺗﯿﺐ‪:‬‬
‫‪١‬‬
‫از ﻣﺨﺎزن ﻣﺮﮐﺰی داﻧﻠﻮد و ﻧﺼﺐ ﻣ ﮐﻨﺪ‪.‬‬
‫• ﺗﻤﺎم ﮐﺪﻫﺎی ﺗﺤﻮﯾﻞدادﻧ ﺷﻤﺎ ﻣ ﺑﺎﯾﺴﺖ ﺗﻮﺳﻂ ﺧﻮدﺗﺎن ﻧﻮﺷﺘﻪ ﺷﺪه ﺑﺎﺷﺪ‪.‬‬
‫• ﺣﺠﻢ ﺗﺤﻮﯾﻞدادﻧ ﻫﺎی ﺷﻤﺎ ﺑﺎﯾﺪ ﮐﻤﺘﺮ از ‪ 500KB‬ﺑﺎﺷﺪ‪.‬‬
‫• ﮐﺪ ﺷﻤﺎ ﺑﺎﯾﺪ ﺑﻪ ﺻﻮرت اﺗﻮﻣﺎﺗﯿ‬
‫ﻗﺎﺑﻞ ‪ build‬ﺷﺪن ﺑﺎﺷﺪ‪ .‬ﯾ‬
‫ﻗﺎﻧﻮن ﺳﺮاﻧﮕﺸﺘ ‪ :‬اﮔﺮ ﮐﺪ ﺷﻤﺎ ﺑﻪ ﻋﻨﻮان ﯾ‬
‫‪ Maven Project‬در ‪ Eclipse‬ﺑﺎز ﺷﺪ‪ ،‬ﻧﺒﺎﯾﺪ ﺧﻄﺎﯾﯽ رخ دﻫﺪ و ﯾﺎ ﻧﯿﺎز ﺑﻪ ﺗﻨﻈﯿﻢ ﺧﺎﺻ وﺟﻮد داﺷﺘﻪ ﺑﺎﺷﺪ‪.‬‬
‫‪٢.٢‬‬
‫‪.‬‬
‫راﺑﻂ ﺑﺮﻧﺎﻣﻪﻧﻮﯾﺴ ‪StackExchange‬‬
‫‪ StackExchange‬ﻣﺠﻤﻮﻋﻪی ﺳﺎﯾﺖﻫﺎی ﭘﺮﺳﺶ و ﭘﺎﺳ‬
‫‪١‬‬
‫اﺳﺖ‪ ،‬ﮐﻪ از ﻣﯿﺎن آنﻫﺎ ﺣﺘﻤﺎًﺑﺎ ‪ StackOverflow‬آﺷﻨﺎ ﻫﺴﺘﯿﺪ‪ .‬ﺑﺎ‬
‫ﺗﻮﺟﻪ ﺑﻪ ﺳﯿﺴﺘﻢ اﻣﺘﯿﺎزدﻫ و ﺳﯿﺎﺳﺖﻫﺎی وﯾﺮاﯾﺸ ﮐﻪ در اﯾﻦ ﺳﺎﯾﺖﻫﺎ وﺟﻮد دارد‪ ،‬ﻣﻌﻤﻮﻻ ﻣﺤﺘﻮای ﻣﻮﺟﻮد از ﮐﯿﻔﯿﺖ ﻣﻨﺎﺳﺒﯽ‬
‫ﺑﺮﺧﻮردارﻧﺪ‪ .‬ﺑﻪ ﻫﻤﯿﻦ دﻟﯿﻞ‪ ،‬از دادهﻫﺎی آن ﺑﻪ ﻋﻨﻮان ‪ dataset‬اﯾﻦ ﻓﺎز اﺳﺘﻔﺎده ﻣ ﮐﻨﯿﻢ‪.‬‬
‫اﯾﻦ ﻣﺠﻤﻮﻋﻪ‪ ،‬اﻣ ﺎن دﺳﺘﺮﺳ ﺳﺎﺧﺘﺎرﻣﻨﺪ ﺑﻪ دادهﻫﺎ را از ﻃﺮﯾﻖ ﯾ‬
‫‪ API‬ﺑﺮای ﮐﺎرﺑﺮان ﻓﺮاﻫﻢ ﻣ ﮐﻨﺪ‪ .‬ﺟﻬﺖ ﻣﻄﺎﻟﻌﻪ و آﺷﻨﺎﯾﯽ‬
‫ﺑﺎ اﯾﻦ راﺑﻂ ﺑﺮﻧﺎﻣﻪﻧﻮﯾﺴ ﻣ ﺗﻮاﻧﯿﺪ ﺑﻪ ﻣﺴﺘﻨﺪات آن )ﮐﻪ اﮐﺜﺮاً اﻣ ﺎن اﺳﺘﻔﺎده از راﺑﻂ را ﻧﯿﺰ ﻓﺮاﻫﻢ ﻣ ﮐﻨﻨﺪ( ﻣﺮاﺟﻌﻪ ﮐﻨﯿﺪ‪.‬‬
‫ﺧﺮوﺟ ‪) API‬ﮐﻪ ورودی ﺑﺮﻧﺎﻣﻪی ﺷﻤﺎ ﺧﻮاﻫﺪ ﺑﻮد( ﺑﻪ ﻓﺮﻣﺖ ‪ JSON‬اﺳﺖ و ﺑﺎﯾﺪ آن را ﭘﺮدازش ﮐﻨﯿﺪ‪ .‬ﺑﺮای اﯾﻦ ﮐﺎر ﺗﺮﺟﯿﺤﺎً‬
‫از ﮐﺘﺎﺑﺨﺎﻧﻪی ‪ gson‬اﺳﺘﻔﺎده ﮐﻨﯿﺪ‪.‬‬
‫اﮔﺮ ﺑﻪ دادهﻫﺎی ﻧﻤﻮﻧﻪ دﻗّﺖ ﮐﻨﯿﺪ‪ ،‬ﺗﮓﻫﺎی ‪ HTML‬را ﻣﯿﺎن ﻧﻮﺷﺘﻪﻫﺎ ﺧﻮاﻫﯿﺪ دﯾﺪ‪ .‬ﺑﺮﺧﻮرد ﻣﻨﺎﺳﺐ ﺑﺎ اﯾﻦ ﺗﮓﻫﺎ ﺑﺎ‬
‫اﺳﺘﻔﺎده از ﮐﺘﺎبﺧﺎﻧﻪﻫﺎی ﻣﻮﺟﻮد‪ ،‬ﻋﻼوه ﺑﺮ ﮐﻤ‬
‫ﺑﻪ ﮐﺴﺐ ﻧﺘﺎﯾﺞ ﺑﻬﺘﺮ‪ ۵٪ ،‬ﻧﻤﺮهی اﺿﺎﻓﻪ را ﻧﯿﺰ ﺑﻪ ﺧﻮد اﺧﺘﺼﺎص‬
‫ﻣ دﻫﺪ‪.‬‬
‫‪.‬‬
‫‪Lucene ٣.٢‬‬
‫‪ Apache Lucene‬ﯾ‬
‫ﮐﺘﺎﺑﺨﺎﻧﻪی آزاد و ﻣﺘﻦﺑﺎز ﺑﺎزﯾﺎﺑﯽ اﻃﻼﻋﺎت اﺳﺖ‪ .‬اﻏﻠﺐ ﺗﻮﺳﻌﻪدﻫﻨﺪﮔﺎﻧ ﮐﻪ ﺧﻮد ﺗﺼﻤﯿﻢ ورود ﺑﻪ‬
‫ﺣﻮزهی ﺗﺨﺼﺼ ﺑﺎزﯾﺎﺑﯽ اﻃﻼﻋﺎت را ﻧﺪارﻧﺪ‪ ،‬از اﯾﻦ ﮐﺘﺎﺑﺨﺎﻧﻪ ﺑﻪ ﻋﻨﻮان ﯾ‬
‫از ﻗﻮیﺗﺮﯾﻦ اﺑﺰارﻫﺎی ﻣﻮﺟﻮد اﺳﺘﻔﺎده ﻣ‬
‫ﮐﻨﻨﺪ‪٢ .‬‬
‫ﺑﺴﯿﺎری از ﺳﺎﯾﺖﻫﺎ و ﻧﺮماﻓﺰارﻫﺎی ﻣﻮﻓّﻖ ﻧﯿﺰ از ‪ Lucene‬ﯾﺎ ﻣﻮﺗﻮرﻫﺎی ﺟﺴﺘﺠﻮی ﻣﺒﺘﻨ ﺑﺮ آن اﺳﺘﻔﺎده ﻣ ﮐﻨﻨﺪ‪ .‬از ﺟﻤﻠﻪ‪:‬‬
‫• ‪ Twitter‬ﺑﺎ ﺗﻐﯿﯿﺮ از ‪ Summize‬ﺑﻪ ‪ Lucene‬ﺳﺮﻋﺖ ﺷﺎﺧﺺﮔﺬاری ﺗﻮﯾﯿﺖﻫﺎﯾﺶ را ‪ ۵٠‬ﺑﺮاﺑﺮ اﻓﺰاﯾﺶ داد‪[۴] .‬‬
‫• ‪ GitHub‬ﺑﯿﺸﺘﺮ از ‪ ٢٠‬ﺗﺮاﺑﺎﯾﺖ ﮐﺪ را ﺑﻪ اﯾﻦ وﺳﯿﻠﻪ ﺟﺴﺘﺠﻮ ﻣ ﮐﻨﺪ‪[٣] .‬‬
‫• ﻣﺠﻤﻮﻋﻪ ﺳﺎﯾﺖﻫﺎی ‪ StackExchange‬از ﻣﻮﺗﻮرﻫﺎی ﺟﺴﺘﺠﻮی ﻣﺒﺘﻨ ﺑﺮ ‪ Lucene‬اﺳﺘﻔﺎده ﻣ ﮐﻨﻨﺪ‪[٢ ،١] .‬‬
‫‪١‬ﻟﯿﺴﺘ از ﺗﻤﺎﻣ ﺳﺎﯾﺖﻫﺎی اﯾﻦ ﻣﺠﻤﻮﻋﻪ اﯾﻨﺠﺎ ﻣﻮﺟﻮد اﺳﺖ‪.‬‬
‫‪٢‬در واﻗ ‪ Lucene‬ﺑﯿﺸﺘﺮ ﻓﺮآﯾﻨﺪﻫﺎی ﺷﺎﺧﺺﮔﺬاری و ﺑﺎزﯾﺎﺑﯽ را ﺑﻪ ﻋﻬﺪه دارد‪ .‬ﮐﺘﺎﺑﺨﺎﻧﻪﻫﺎﯾﯽ ﻣﺎﻧﻨﺪ ‪ elasticsearch‬ﺑﺎ اﺿﺎﻓﻪ ﮐﺮدن اﺟﺰاء دﯾ ﺮ ﯾ‬
‫ﻣﻮﺗﻮر ﺟﺴﺘﺠﻮ ﺑﻪ ‪ Lucene‬ﻋﻤﻼ ﯾ‬
‫ﻣﻮﺗﻮر ﺟﺴﺘﺠﻮی ﺣﺎﺿﺮ و آﻣﺎده را ﻓﺮاﻫﻢ ﻣ ﮐﻨﻨﺪ‪ .‬اﺳﺘﻔﺎده از اﯾﻦ ﮐﺘﺎﺑﺨﺎﻧﻪﻫﺎ )ﺑﻪ ﺟﺎی اﺳﺘﻔﺎدهی ﻣﺴﺘﻘﯿﻢ از ‪(Lucene‬‬
‫ﻧﯿﺰ ﺑﺴﯿﺎر راﯾﺞ اﺳﺖ‪.‬‬
‫‪٢‬‬
‫‪ Lucene‬را ﺑﺎ اﺳﺘﻔﺎده از ‪ Maven‬ﺑﻪ ﭘﺮوژهی ﺧﻮد اﺿﺎﻓﻪ ﮐﻨﯿﺪ و ﺳﻌ ﮐﻨﯿﺪ ﺑﺎ آن ﮐﻤ آﺷﻨﺎ ﺷﻮﯾﺪ‪ .‬ﮐﺘﺎب ‪Lucene in Action‬‬
‫ﺑﻪ ﻋﻨﻮان ﻣﺮﺟ در اﺧﺘﯿﺎر ﺷﻤﺎ ﻗﺮار ﮔﺮﻓﺘﻪ‪.‬‬
‫ﻫﺪف اﯾﻦ ﭘﺮوژه آﺷﻨﺎﯾﯽ ﺑﺎ ﺳﺎﺧﺘﺎر ‪ Lucene‬اﺳﺖ‪ ،‬ﭘﺲ ﻣﻨﻄﻖ ﮐﺪ ﺧﻮدﺗﺎن را ﺳﺎده ﻧﮕﻪ دارﯾﺪ و از اﻧﺠﺎم ﮐﺎرﻫﺎی‬
‫ﻏﯿﺮﺿﺮوری )ﻣﺎﻧﻨﺪ ﻧﻮﺷﺘﻦ ‪ Tokenizer‬ﺧﻮدﺗﺎن( ﺧﻮدداری ﮐﻨﯿﺪ‪.‬‬
‫اﮐﺜﺮ ﺧﻮاﺳﺘﻪﻫﺎی ﭘﺮوژه ﺑﻪ ﺳﺎدﮔ ﺗﻮﺳﻂ ‪ Lucene‬ﺑﺮآورده ﻣ ﺷﻮﻧﺪ‪.‬‬
‫‪٣‬‬
‫‪.‬‬
‫ﺻﻮرت ﻣﺴﺄﻟﻪ‬
‫ﻣ ﺧﻮاﻫﯿﻢ ﺑﺨﺸ از ﻋﻤﻠ ﺮد ﺟﺴﺘﺠﻮی ﭘﯿﺸﺮﻓﺘﻪی ‪ StackExchange‬را ﭘﯿﺎدهﺳﺎزی ﮐﻨﯿﻢ‪ .‬ﺑﺮای اﯾﻦ ﮐﺎر‪ ،‬ﺑﺎ اﺳﺘﻔﺎده از راﺑﻂ‬
‫ﻣﻮﺟﻮد‪ ،‬دادهﻫﺎی ﺳﺆالﻫﺎ را اﺳﺘﺨﺮاج ﮐﺮده‪ ،‬و ﺳﭙﺲ ﻋﻤﻞ ﺷﺎﺧﺺﮔﺬاری و ﺑﺎزﯾﺎﺑﯽ را ﺑﺎ اﺳﺘﻔﺎده از ‪ Lucene‬اﻧﺠﺎم ﻣ دﻫﯿﻢ‪.‬‬
‫‪ Stopword Elimination‬و ‪ Stemming‬را اﻋﻤﺎل و ﺗﺄﺛﯿﺮ آن‬
‫ﺟﻬﺖ آﺷﻨﺎﯾﯽ ﺑﺎ روﻧﺪ ﭘﺮدازش دادهﻫﺎ‪ ،‬ﺗﻼش ﻣ ﮐﻨﯿﻢ دو ﺗﮑﻨﯿ‬
‫را ﻣﺸﺎﻫﺪه ﮐﻨﯿﻢ‪.‬‬
‫‪ ١.٣‬ﺟﻤ آوری اﺳﻨﺎد‬
‫اﺳﻨﺎدی ﮐﻪ ﻣ ﺑﺎﯾﺴﺖ ﭘﺮدازش ﺷﻮﻧﺪ‪ ،‬ﺑﻪ ﺻﻮرت دﺳﺘﻪای و در ﻗﺎﻟﺐ ‪ JSON‬در اﺧﺘﯿﺎر ﺑﺮﻧﺎﻣﻪی ﺷﻤﺎ ﻗﺮار ﻣ ﮔﯿﺮﻧﺪ‪ .‬اﯾﻦ دادهﻫﺎ‬
‫ﻣﺴﺘﻘﯿﻤﺎً از واﺳﻂ اﻃﻼﻋﺎت ﭘﺮﺳﺶﻫﺎ اﺳﺘﺨﺮاج ﻣ ﺷﻮﻧﺪ‪ .‬ﺑﺮای اﻃﻼﻋﺎت دﻗﯿﻖﺗﺮ در ﻣﻮرد ﭘﺎراﻣﺘﺮﻫﺎی ‪ API‬ﺑﻪ ﺿﻤﯿﻤﻪﻫﺎ ﻣﺮاﺟﻌﻪ‬
‫ﮐﻨﯿﺪ‪.‬‬
‫‪ ٢.٣‬ﻓﯿﻠﺪﻫﺎ‬
‫در اﯾﻦ ﻓﺎز‪ ،‬ﺗﻨﻬﺎ ﻗﺼﺪ دارﯾﻢ ﺟﺴﺘﺠﻮ را در ﻓﯿﻠﺪﻫﺎی زﯾﺮ اﻧﺠﺎم دﻫﯿﻢ‪:‬‬
‫• ‪accepted‬‬
‫• ‪ views‬ﺣﺪّاﻗﻞ ﺗﻌﺪاد دﻓﻌﺎت ﻧﻤﺎﯾﺶ ﺳﺆال‬
‫• ‪ url‬ﯾ‬
‫آدرس )ﺷﺎﯾﺪ ﺷﺎﻣﻞ ‪ (wildcard‬ﮐﻪ در ﺳﺆال ﻇﺎﻫﺮ ﺷﺪه‬
‫• ‪ toDate & fromDate‬ﺗﺎرﯾﺦ ﺳﺎﺧﺘﻪ ﺷﺪن ﺳﺆال‬
‫• ‪ sort‬ﻣﻌﯿﺎر ﻣﺮﺗﺐﺳﺎزی ﻧﺘﺎﯾﺞ‬
‫• ‪q‬ﯾ‬
‫رﺷﺘﻪ ﮐﻪ ﺑﺎ اﻟ ﻮرﯾﺘﻢ ﻧﺎﻣﺸﺨّﺼ )و ﺑﺎ اﺳﺘﻔﺎده از ﺗﻤﺎم دادهﻫﺎی ﻣﻮﺟﻮد( ﻋﻤﻞ ﺑﺎزﯾﺎﺑﯽ را اﻧﺠﺎم ﻣ دﻫﺪ‪.‬‬
‫ﺟﻬﺖ آﺷﻨﺎﯾﯽ ﺑﯿﺸﺘﺮ ﺑﺎ اﯾﻦ ﻓﯿﻠﺪﻫﺎ ﺑﻪ ﻣﺴﺘﻨﺪات ‪ API‬و ﺿﻤﯿﻤﻪﻫﺎ ﻣﺮاﺟﻌﻪ ﮐﻨﯿﺪ‪.‬‬
‫‪٣‬‬
‫‪٣.٣‬‬
‫ﻓﯿﻠﺘﺮﻫﺎ‬
‫در اﯾﻦ ﻣﺮﺣﻠﻪ ﻣ ﺑﺎﯾﺴﺖ اﻣ ﺎن اﺳﺘﻔﺎده از ‪ Stopword Elimination‬و ‪ Stemming‬را ﻓﺮاﻫﻢ ﮐﻨﯿﺪ‪.‬‬
‫‪ ۴.٣‬ﻓﺸﺮدهﺳﺎزی‬
‫در اﯾﻦ ﻣﺮﺣﻠﻪ‪ ،‬ﺗﻼش ﮐﻨﯿﺪ ﺗﺎ ﺑﺎ اﺳﺘﻔﺎده از ﻗﺎﺑﻠﯿﺖﻫﺎی ﺧﻮدِ ‪ ،Lucene‬ﺣﺠﻢ ﺷﺎﺧﺺ را ﺗﺎ اﻧﺪازهی ﻣﻤ ﻦ ﮐﺎﻫﺶ دﻫﯿﺪ‪ .‬ﻧﺘﺎﯾﺞ‬
‫ﺑﺮرﺳ ﻫﺎی ﺧﻮد را در ﻣﺴﺘﻨﺪات ﻧﯿﺰ ﺑﯿﺎورﯾﺪ‪.‬‬
‫ﭘﯿﺎدهﺳﺎزی اﯾﻦ ﺑﺨﺶ اﺧﺘﯿﺎری ﺑﻮده و ﺷﺎﻣﻞ ‪ ۵٪‬ﻧﻤﺮهی اﺿﺎﻓﻪ اﺳﺖ‪.‬‬
‫‪.‬‬
‫‪ ۴‬ارزﯾﺎﺑﯽ‬
‫‪١.۴‬‬
‫ارزﯾﺎﺑﯽ ﺧﻮدﮐﺎر – ﻗﻄﻌ‬
‫ﺑﺨﺶﻫﺎﯾﯽ از ﭘﺮوژه ﮐﻪ ﺟﻮاب )ﺣﺪوداً( ﯾ ﺘﺎ دارﻧﺪ‪ ،‬ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﺗﺴﺖﻫﺎی ﺧﻮدﮐﺎر ﻧﻤﺮهدﻫ ﻣ ﺷﻮﻧﺪ‪ .‬ﻃﺒﯿﻌﺘﺎً در اﯾﻦ ﺑﺨﺶ‬
‫ﭘﺎراﻣﺘﺮ ‪ resultOrder‬ﻣﻘﺪار ‪ relevance‬را ﻧﺨﻮاﻫﺪ ﮔﺮﻓﺖ‪.‬‬
‫‪٢.۴‬‬
‫ارزﯾﺎﺑﯽ ﺧﻮدﮐﺎر – ﺧ ّ ﻗﺎﻧﻪ‬
‫در اﯾﻦ ﺑﺨﺶ‪ ،‬ﺷﻤﺎ ﺑﺎﯾﺪ ﺑﯿﺸﺘﺮﯾﻦ ﺗﻼش ﺧﻮد را ﺟﻬﺖ ﻣﻄﺎﺑﻘﺖ ﺑﺎ ﻧﺘﺎﯾﺞ ﺟﺴﺘﺠﻮی ﻣﺮﺟ )ﭘﯿﺎدهﺳﺎزی ﺧﻮد ‪(StackExchange‬‬
‫داﺷﺘﻪ ﺑﺎﺷﯿﺪ‪ .‬در اﯾﻦ ﺑﺨﺶ‪ initParams ،‬ﻣﻘﺪار ‪ null‬ﻣ ﮔﯿﺮد و ﺷﻤﺎ ﻣ ﺗﻮاﻧﯿﺪ از ﻫﺮ ﺗﺮﮐﯿﺐ دﻟﺨﻮاﻫ از ﻓﯿﻠﺘﺮﻫﺎی ﻣﻮﺟﻮد‬
‫)ﯾﺎ ﻏﯿﺮ ﻣﻮﺟﻮد!( اﺳﺘﻔﺎده ﮐﻨﯿﺪ‪.‬‬
‫اﯾﻦ ﺑﺨﺶ ﺑﻪ ﺻﻮرت ﻣﻘﺎﯾﺴﻪای ﻣﯿﺎن ﺗﻤﺎم داﻧﺸﺠﻮﯾﺎن ﻧﻤﺮهدﻫ ﺧﻮاﻫﺪ ﺷﺪ‪ .‬ﺳﻘﻒ ‪ ١۵٪‬ﻧﻤﺮهی اﺿﺎﻓﻪ ﺑﺮای اﯾﻦ ﺑﺨﺶ‬
‫در ﻧﻈﺮ ﮔﺮﻓﺘﻪ ﺷﺪه‪.‬‬
‫‪٣.۴‬‬
‫‪.‬‬
‫ارزﯾﺎﺑﯽ دﺳﺘ – ﺗﺤﻮﯾﻞ ﺣﻀﻮری‬
‫در ﺻﻮرﺗ ﮐﻪ ﺑﻪ دﻟﯿﻞ ﺑﯽدﻗّﺘ ﻫﺎی ﺟﺰﺋ ﻧﻤﺮهی ﺗﺼﺤﯿﺢ اﺗﻮﻣﺎﺗﯿ‬
‫را درﯾﺎﻓﺖ ﻧﮑﻨﯿﺪ‪ ،‬اﻣ ﺎن ﺟﺒﺮان ﺑﺨﺸ از آن را در ﺗﺤﻮﯾﻞ‬
‫ﺣﻀﻮری ﺧﻮاﻫﯿﺪ داﺷﺖ‪ .‬ﻫﻤﭽﻨﯿﻦ‪ ،‬ﻣﺴﺘﻨﺪات ﺷﻤﺎ ﻫﻨﮕﺎم ﺗﺤﻮﯾﻞ ﺣﻀﻮری ﺑﺮرﺳ ﺧﻮاﻫﺪ ﺷﺪ‪.‬‬
‫‪۵‬‬
‫ﻧﮑﺎت ﭘﯿﺎدهﺳﺎزی‬
‫ﺟﻬﺖ درﯾﺎﻓﺖ ﻧﻤﺮهی ﺑﺨﺶ ارزﯾﺎﺑﯽ ﺧﻮدﮐﺎر‪ ،‬ﻧﯿﺎز ﻫﺴﺖ ﺗﺎ ﻣﻮارد زﯾﺮ را در ﮐﺪ رﻋﺎﯾﺖ ﮐﻨﯿﺪ‪:‬‬
‫‪۴‬‬
.‫ﻧﻤﻮﻧﻪ از ﮐﻼس ﺷﻤﺎ ﺳﺎﺧﺘﻪ ﺷﺪه و ﻓﺮاﺧﻮاﻧ ﻣ ﺷﻮد‬
‫ ﺑﻠ ﻪ ﯾ‬.‫ ﮐﺪ ﺷﻤﺎ اﺟﺮا ﻧﺨﻮاﻫﺪ ﺷﺪ‬main ‫• ﺗﺎﺑﻊ‬
.‫ ﯾﺎ زﯾﺮﭘ ﯿﺞﻫﺎی آن ﻗﺮار ﺑ ﯿﺮد‬edu.sharif.ce.fall92.mir.pa2.impl ‫• ﮐﺪﻫﺎی ﺷﻤﺎ ﺑﺎﯾﺪ در ﭘ ﯿﺞ‬
.‫ﻣﺤﺘﻮای ﭘ ﯿﺞﻫﺎی دﯾ ﺮ ﺑﻪ ﮐﻠّ ﻧﺎدﯾﺪه ﮔﺮﻓﺘﻪ ﻣ ﺷﻮﻧﺪ‬
(MyStackExchangeAdvancedSearchImpl)
‫ ﯾﺎ ﻣﺤﻞ ﮐﻼس اﺻﻠ‬interface ‫• از ﺗﻐﯿﯿﺮ ﻧﺎم ﯾﺎ‬
.‫ﺧﻮدداری ﮐﻨﯿﺪ‬
.
‫ ﺿﻤﯿﻤﻪﻫﺎ‬۶
‫ﻫﺎ و ﺑﺮﺧ ﺗﻮﺿﯿﺤﺎت ﺗﮑﻤﯿﻠ‬interface ‫ ﺷﺎﻣﻞ ﺗﻌﺎرﯾﻒ‬،‫ﮐﺪ ﻧﻤﻮﻧﻪ‬
‫• ﯾ‬
Lucene in Action ‫• ﮐﺘﺎب‬
‫ ﺗﺤﻮﯾﻞدادﻧ ﻫﺎ‬٧
pom.xml ‫ ﻓﺎﯾﻞ‬+ src ‫• ﻓﻮﻟﺪر‬
PDF ‫ﻓﺎﯾﻞ‬
‫ در ﻗﺎﻟﺐ ﯾ‬:‫• ﻣﺴﺘﻨﺪات ﭘﺮوژه‬
.‫ ارﺳﺎل ﻧﻤﺎﯾﯿﺪ‬89012345_PA2.zip ‫ﻓﺎﯾﻞ زﯾﭗ ﺑﺎ ﻓﺮﻣﺖ‬
‫ﻣﻮارد ﻓﻮق را در ﻗﺎﻟﺐ ﯾ‬
‫ﻣﺮاﺟ‬
[1] Stack Overflow Search – Now 81% Less Crappy,
Jeff Atwood, January 27th 2011
http://blog.stackoverflow.com/2011/01/stack-overflow-search-now-81-less-crappy/
[2] A new search engine for Stack Exchange,
Nick Craver, December 23rd 2012
http://meta.stackoverflow.com/questions/160100/a-new-search-engine-for-stack-exchange
[3] A Whole New Code Search,
TwP, January 23rd 2013
۵
https://github.com/blog/1381-a-whole-new-code-search
[4] Twitter’s New Search Architecture,
Michael Busch, October 6th 2010
http://engineering.twitter.com/2010/10/twitters-new-search-architecture.
html
۶