PDA

View Full Version : سوال: ایجاد سیستم Search در بین مقالات مانند سایت های بزرگ ارائه دهنده مقاله



fa_karoon
چهارشنبه 12 اسفند 1388, 22:32 عصر
می خواهم وقتی کاربر کلمه ای را Search کرد این کلمه در متن تمام فایل های مقالات که قبلا توسط مدیر یا اشخاص خاص آپلود شده اند جستجو شود و عنوان تمام مقالاتی که این کلمه در آن ها یافت شده نشان داده شود.
حال چگونه می توانم درون فایل های آپلود شده را به دنبال کلمه ی مورد نظر جستجو کنم؟

eyes_shut_number1
چهارشنبه 12 اسفند 1388, 22:41 عصر
فایل رو از طریق کلاس IO.FILE باز میکنی و به صورتی خط بخ خط میخونی و داخل یه آرایه یا رشته میریزی بعد داخل اونه رشته کلمه را جستجو میکنی
بهترین حالت هم استفاده از generic ها هست

fa_karoon
جمعه 14 اسفند 1388, 20:32 عصر
ممنون از پاسختون می شه اگر مطلب آموزشی در این باره دارید بذارید؟ باز هم ممنون

iman_ad
جمعه 14 اسفند 1388, 20:55 عصر
روشهای ذیگه ای هم وجود داره
معمولا فالها رو ایندکس می کنند داخل دیتابیس و کلمات کلیدی تعریف می کنند.
معمولا متن کل مقاله هم داخل دیتابسی ذخیره می شه و اگه از فیلد ntext استفاده کنی باید از FULLTEXT CATALOG استفاده کنی بستگی به مقدار متن داره
روشی هم که دوستمون گفتد عملا تو حجم زیاد فایلها منطقی نیست چون باید تک تک فایها رو باز بسته کنی هر بار
برای خروجی pdf هم از کتابخانه های آماده که دوستان گذاشتن استفاده می کنی

ironman
جمعه 14 اسفند 1388, 21:20 عصر
بنده هم با نظر دوستمون iman_ad موافقم. روشی که توسط eyes_shut_number1 گفته شد در حجم بالا تو سرعتتون تاثیر بسزایی داره

fa_karoon
شنبه 15 اسفند 1388, 11:21 صبح
روشهای ذیگه ای هم وجود داره
معمولا فالها رو ایندکس می کنند داخل دیتابیس و کلمات کلیدی تعریف می کنند.
معمولا متن کل مقاله هم داخل دیتابسی ذخیره می شه و اگه از فیلد ntext استفاده کنی باید از FULLTEXT CATALOG استفاده کنی بستگی به مقدار متن داره
روشی هم که دوستمون گفتد عملا تو حجم زیاد فایلها منطقی نیست چون باید تک تک فایها رو باز بسته کنی هر بار
برای خروجی pdf هم از کتابخانه های آماده که دوستان گذاشتن استفاده می کنی

ابتدا از پاسختون ممنون، پس باید هربار که کاربر فایلی رو آپلود می کنه توسط دستوراتی(؟) تمام فایل رو بخونم و تو یه فیلد ذخیره کنم حتی اگه مقاله 100 صفحه باشه یا تعداد مقالات بیش از 50 یا 60 تا باشند؟
من وقتی با ReadAllByte فایل PDF رو می خونم و در فیلد ntext می ریزم پیغام عدم سازگاری این دو نوع رو می ده هر کاری کردم خروجی تابع رو کانورت کنم نشد
در ضمن من موقع تعریف فیلد FullText Catalog رو پیدا نکردم کجا باید دنبالش بگردم و به چه درد می خوره؟
لطفا بگین این کتابخانه های آماده برای خروجی گرفتن از PDF رو هم کجا می تونم پیدا کنم
باز هم تشکر

Milad Mohseny
شنبه 15 اسفند 1388, 13:53 عصر
سلام اینها رو هم ببین بد نیست فقط یه کوچولو باید دست به دامن هاستت بشی.
http://weblogs.ASP.NET/wallym/archive/2005/02/28/382060.aspx
http://www.codeproject.com/KB/architecture/sqlfulltextindexing.aspx
http://stackoverflow.com/questions/272694/using-full-text-search-with-pdf-files-in-sql-server-2005

iman_ad
شنبه 15 اسفند 1388, 18:55 عصر
می تونی آدرس فایل pdf داخل یک فیلد ذخیره کنی فقط و برای جستجو از کلمات کلیدی استفاده کنی.
کلمات کلیدی با ویرگول از هم جدا می کنی و در یک فیلد nvarchar ذخیره می کنی. لازم نیست دیگه کل مقاله جستجو کنی.
اینم کتابخانه ای که خواسته بودی
http://hasheminezhad.com/itextsharp
البته به شرطی که بخوای کل متن تو دیتابیس ذخیره کنی

fa_karoon
شنبه 15 اسفند 1388, 19:46 عصر
می تونی آدرس فایل pdf داخل یک فیلد ذخیره کنی فقط و برای جستجو از کلمات کلیدی استفاده کنی.
کلمات کلیدی با ویرگول از هم جدا می کنی و در یک فیلد nvarchar ذخیره می کنی. لازم نیست دیگه کل مقاله جستجو کنی.
اینم کتابخانه ای که خواسته بودی
http://hasheminezhad.com/itextsharp
البته به شرطی که بخوای کل متن تو دیتابیس ذخیره کنی

اول ممنون از پاسختون، یعنی مدیر هنگام آپلود فایل چند کلمه کلیدی رو به طور دستی تو یه فیلد ذخیره کنه؟
در ضمن دوستان توجه کنند که من دقیقا همین کار رو می کنم یعنی آدرس فایل ها تو پایگاه ذخیره می شه و خود فایل در پوشه ای آپلود می شه. حالا بنا به نظر دوستان گفته اند باید متن فایل رو در پایگاه ذخیره کنم تا بتونم توش جستجو کنم

ironman
شنبه 15 اسفند 1388, 20:01 عصر
دوست عزیز بهترین راه اینه که همراه مقالات یه قسمت چکیده هم به فیلدهات اضافه کنی
که هر مقاله ایی که دریافت میکنی به صورت دستی فیلد چکیده مربوط به اونم چر کنی (همونطور که دوستمون قبلا گفتن)...
اگه بخوای فایل رو تو دیتابیس ذخیره و جستجو کنی که خیلی هم رو حجم و هم روی سرعتت تاثیر میزاره....
اگرم بخوای داخل خود فایل جستجو کنی عملا علاوه بر مشکلات فوق مشکل فایل های pdf هم داری که اگه به صورت متن فارسی باشه نمیتونی داخلش جستجو داشته باشی...
در نتیجه بهترین کار اضافه کردن فیلد چکیده هست...
در مورد کارفرما هم باید بگم که بهر حال کار ماشینی انجام میشه و نمیشه انتظار داشته که همه کارها رو اتوماتیک کرد (البته شدنش میشه ولی ......)..
باز هم اگه دوستان راه حل بهتری سراغ دارن خوشحال میشیم :متفکر:

iman_ad
شنبه 15 اسفند 1388, 21:09 عصر
به این کار می گن ایندکس کردن، بستگی داره به دید خودت
نظر من دقیقن کاری که meta tag ها در html انجام می ده

fa_karoon
یک شنبه 16 اسفند 1388, 00:16 صبح
به این کار می گن ایندگس کردن، بستگی داره به دید خودت
نظر من دقیقن کاری که meta tag ها در html انجام می ده

می شه بفرمایید منظورتون از (کاری که meta tag ها در html انجام می ده) چیه و به چه صورت؟ مرسی

iman_ad
یک شنبه 16 اسفند 1388, 18:48 عصر
یعنی یک فیلد برای کلمات کلیدی و یک فیلد برای توضیح کوتاه یه abstract تعریف کنیم

Milad Mohseny
یک شنبه 16 اسفند 1388, 21:43 عصر
یعنییک فیلد برای کلمات کلیدی و یک فیلد برای توضیح کوتاه یه abstract تعریف کنیم
متاسفانه براي فيلد abstract يا كاربر بايد پرش كنه كه ممكنه اين كارو درست انجام نده يا تنبلي كنه و ... كه ممكنه بعداً بدليل نداشتن چكيده مناسب در نتيجه جستجو ظاهر نشه و يا اينكه يه تيم كارشناسي پشت اين وب سايت باشه كه هر مقاله اي كه up ميشه رو بخونه و فيلد abstract رو تكميل كنه كه به نظر من هيچ كدوم از اين راه ها خيلي جالب نيست. به نظر من جستجو در متن فايل مطمئن تر است.نمونه اش رو هم در چند پست قبل گفتم.

iman_ad
یک شنبه 16 اسفند 1388, 22:17 عصر
لطفا اگه سایتی هست که داره این کار می کنه ذکر کنید
چطور یک فایل pdf فارسی می خوای سرچ کنی
تازه سرچم کردی باید تک تک فایل ها رو جداگانه باز کنی بگردی و ببندی
نکه اینکه از همون اول کل داکیومنت با یک html editor داخل یک فیلد ntext یا nvarchar(max) ذخیره کنی

Milad Mohseny
یک شنبه 16 اسفند 1388, 22:32 عصر
لطفا اگه سایتی هست که داره این کار می کنه ذکر کنید
چطور یک فایل pdf فارسی می خوای سرچ کنی
تازه سرچم کردی باید تک تک فایل ها رو جداگانه باز کنی بگردی و ببندی
نکه اینکه از همون اول کل داکیومنت با یک html editor داخل یک فیلد ntext یا nvarchar(max) ذخیره کنی
استاد عزيزم ضمن حفظ آرامش لينك هاي پست 7 رو دوباره مطالعه بفرمائيد. در مورد اينكه اين روش با فارسي مشكل داره يا نه نميدونم اگه كسي كار كرده يا ميدونه بگه ولي اگه لينك هاي پست 7 رو مطالعه كني منظورم رو متوجه ميشي و با اين روش ميشه full-text index و ... رو هم انجام داد و بر روي اون فيلد جستجو كرد ديگه لازم نيست تو serach تك تك فايل هارو بازكني بگردي. :بامزه:

iman_ad
دوشنبه 17 اسفند 1388, 00:50 صبح
منظور من سایتی که داره از این تکنولوژی استفاده می کنه
مثلا wikipedia چیکار می کنه؟

Milad Mohseny
دوشنبه 17 اسفند 1388, 07:45 صبح
منظور من سایتی که داره از این تکنولوژی استفاده می کنه
مثلا wikipedia چیکار می کنه؟
قشنگم قرار نیست هرکی هر کاری میکنه ما دوان دوان به سمت Copy&Paste برویم. باید راه های جدید رو هم امتحان کرد. کلاً بیخیال داره بحث به بیراهه میره و از مطالب علمی خارج میشه که من شدیداً باهاش مخالم. من نظرم رو گفتم و لینک و مستندات هم دادم. شماهم نظرت رو گفتی اجازه بده خواننده تصمیم بگیره. لطفاً دیگه پاسخ نده. از مدیر بخش هم میخواهم در موقع مناسب این پیام رو حذف کنه.

iman_ad
دوشنبه 17 اسفند 1388, 17:28 عصر
آقا شما مشکل داری انگار
من اصلا منظورم شخص خواصی نیست
هدف به اشتراک گذاشتن تجربست
وکیپدیا سایتی که هزاران مقاله داخلشه پرسیدم کسی می دونه این سایت از چه سیستمی استفاده می کنه ذکرم نکرم شما پاسخ بدی که داری می زنی
ما باید از تجربه دیگران استفاده کنیم این چه طرز برخورده! هر تقاضاییم از هر کسی داری انجام بده

mehdi.mousavi
دوشنبه 17 اسفند 1388, 17:57 عصر
می خواهم وقتی کاربر کلمه ای را Search کرد این کلمه در متن تمام فایل های مقالات که قبلا توسط مدیر یا اشخاص خاص آپلود شده اند جستجو شود و عنوان تمام مقالاتی که این کلمه در آن ها یافت شده نشان داده شود. حال چگونه می توانم درون فایل های آپلود شده را به دنبال کلمه ی مورد نظر جستجو کنم؟

سلام.
سوال خیلی خوبی پرسیدید. اگر من باشم، سیستم رو بدین گونه طراحی میکنم که پس از Upload شدن فایل روی سرور، پیامی توی MSMQ میذارم تا از رسیدن یک فایل جدید مطلع بشم. وقتی فایل جدید دریافت شد، NT-Service ای رو که برای بررسی Document های Upload شده طراحی شده، فعال میشه و شروع به عمل Indexing میکنه. اسم این NT Service رو Indexer میذارم. توسط این Indexer، کلیه فایلهای Upload شد، بررسی میشه. حالا اینجا چند شیوه وجود داره. یکی اینکه به روش Search Engine ها عمل کنم. در واقع، یک Vector Space Model ای بسازم که بتونم از هر Document اهمیت هر واژه، فرکانس تکرار هر واژه و ... رو بدست بیارم تا بتونم نتایج بهتری رو هنگام جستجو به کاربر برگردونم... در عین حال، QueryProcessor و Ranker ای باید داشته باشم که بتونم عبارات وارد شده برای جستجو رو پردازش و به هر Document نیز یک رتبه بدم. چون مایلم تا اسناد بر اساس رتبه مرتب شده و به کاربر نمایش داده بشن.

در هر حال، امیدوارم منظورم رو گرفته باشید. برای شروع و آشنایی با نحوه کار Search Engine ها، میتونید به این سایت رجوع کنید (http://horicky.blogspot.com/2010/03/search-engine-basics.html).

موفق باشید.

iman_ad
دوشنبه 17 اسفند 1388, 18:03 عصر
سلام.
سوال خیلی خوبی پرسیدید. اگر من باشم، سیستم رو بدین گونه طراحی میکنم که پس از Upload شدن فایل روی سرور، پیامی توی MSMQ میذارم تا از رسیدن یک فایل جدید مطلع بشم. وقتی فایل جدید دریافت شد، NT-Service ای رو که برای بررسی Document های Upload شده طراحی شده، فعال میشه و شروع به عمل Indexing میکنه. اسم این NT Service رو Indexer میذارم. توسط این Indexer، کلیه فایلهای Upload شد، بررسی میشه. حالا اینجا چند شیوه وجود داره. یکی اینکه به روش Search Engine ها عمل کنم. در واقع، یک Vector Space Model ای بسازم که بتونم از هر Document اهمیت هر واژه، فرکانس تکرار هر واژه و ... رو بدست بیارم تا بتونم نتایج بهتری رو هنگام جستجو به کاربر برگردونم... در عین حال، QueryProcessor و Ranker ای باید داشته باشم که بتونم عبارات وارد شده برای جستجو رو پردازش و به هر Document نیز یک رتبه بدم. چون مایلم تا اسناد بر اساس رتبه مرتب شده و به کاربر نمایش داده بشن.

در هر حال، امیدوارم منظورم رو گرفته باشید. برای شروع و آشنایی با نحوه کار Search Engine ها، میتونید به این سایت رجوع کنید (http://horicky.blogspot.com/2010/03/search-engine-basics.html).

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

fa_karoon
دوشنبه 17 اسفند 1388, 21:39 عصر
آقای mehdi.mousavi لطفا توضیح بیشتری درباره MSMQ و NT Service بدید چون کاملا کلمات و مطالب برام نا آشنا بودند
از راهنمایی حرفه ای تون هم ممنون

Alireza_Salehi
سه شنبه 18 اسفند 1388, 01:31 صبح
آقای mehdi.mousavi لطفا توضیح بیشتری درباره MSMQ و NT Service بدید چون کاملا کلمات و مطالب برام نا آشنا بودند
از راهنمایی حرفه ای تون هم ممنون
Microsoft Message Queuing
محلی برای دریافت پیام از یک برنامه و رساندن تضمین شده آن به برنامه دیگر
مثال:http://www.codeproject.com/KB/cs/mgpmyqueue.aspx
با WCF هم میتونید کار کنید.

NT-Service
یک سرویس که به صورت backgroud کارش رو انجام میده. مثل خیلی از سرویس هایی که در قسمت services در Task manager ویندوز دیده میشوند.



البته برای استفاده از ویندوز سرویس ها باید سرور اختصاصی داشته باشید و در محیط اشتراکی قابل استفاده نیست.

vcldeveloper
سه شنبه 18 اسفند 1388, 11:11 صبح
وقتی فایل جدید دریافت شد، NT-Service ای رو که برای بررسی Document های Upload شده طراحی شده، فعال میشه و شروع به عمل Indexing میکنه. اسم این NT Service رو Indexer میذارم. توسط این Indexer، کلیه فایلهای Upload شد، بررسی میشه. البته روی ویندوز یک گزینه آماده این هست که به جای نوشتن Indexer خودشان، از Indexing Service خودِ ویندوز استفاده کنند، و به این ترتیب جزئیات ایندکس گزاری را به ویندوز واگذار کنند.

mehdi.mousavi
سه شنبه 18 اسفند 1388, 14:51 عصر
البته روی ویندوز یک گزینه آماده این هست که به جای نوشتن Indexer خودشان، از Indexing Service خودِ ویندوز استفاده کنند، و به این ترتیب جزئیات ایندکس گزاری را به ویندوز واگذار کنند.

سلام.
درسته، اما اگر قرار به استفاده از نرم افزارهای 3rd party باشه، من Google Mini (http://www.google.com/enterprise/search/mini.html) رو پیشنهاد می کنم. البته 3000 دلار خرج ور میداره واسشون، اما نتیجه خیره کننده هستش.

پاورقی: اگر مایلید از Windows Indexing Service استفاده کنید، از اینجا شروع کنید. (http://msdn.microsoft.com/en-us/library/ms689646%28VS.85%29.aspx)

fa_karoon
سه شنبه 18 اسفند 1388, 23:49 عصر
از همه پاسخ های تخصصی همه دوستان ممنونم اما آیا واقعا هیچ راه راحتتری نیست که بشه تو PDF فارسی جستجو کرد؟ من یه مقدار محدودیت زمان دارم.

ironman
چهارشنبه 19 اسفند 1388, 09:22 صبح
سلام دوست عزیز ..
مشکل دقیقا سر همین جستجو داخل یک فایل pdf هست...
راحترین راه همونی بود که گفته شد (قرار دادن یک فیلد abstract)...:چشمک: