هذه مدونة تقنية تتعلق بتكنولوجيا التعرف على الصور على الحروف والتعلم الآلي وبناء محرك البحث البسيط. هذا هو المكان الذي أستمر فيه في تسجيل نتائج البحث والخبرات كل يوم أثناء القيام بمشروع التخرج.
تشير تقنية OCR (التعرف على الأحرف البصرية) إلى العملية التي تحقق فيها الأجهزة الإلكترونية (مثل الماسحات الضوئية أو الكاميرات الرقمية) من الأحرف المطبوعة على الورق ، وتحديد أشكالها عن طريق اكتشاف أنماط داكنة ومشرقة ، ثم ترجمة الأشكال إلى نص الكمبيوتر باستخدام طرق التعرف على الأحرف.
تم تطوير محرك OCR من Tesseract لأول مرة بواسطة HP Labs في عام 1985 ، وبحلول عام 1995 ، أصبح أحد أكثر المحركات الدقة في صناعة التعريف في صناعة التعرف الضوئي على الحروف. ومع ذلك ، قررت HP قريبًا التخلي عن أعمال OCR الخاصة بها ، وتم الاحتفاظ Tesseract أيضًا دون جدوى. بعد عدة سنوات ، أدرك HP أنه بدلاً من وضع Tesseract على الرف ، سيكون من الأفضل المساهمة في صناعة البرمجيات مفتوحة المصدر وتجديد شبابها - في عام 2005 ، تم الحصول على Tesseract من قبل معهد Nevada لتكنولوجيا المعلومات في الولايات المتحدة ، وسعى إلى تحسين Bugs وتحسين Tesseract من Google. تم إصدار Tesseract كمشروع مفتوح المصدر على Google Project ، وأحدث الإصدار 3.0 يدعم بالفعل OCR الصيني.
في مثل هذه الخلفية التكنولوجية الناضجة ، أريد حقًا استخدام تقنية OCR هذه ودمجها مع تقنية تطوير الإنترنت الشهيرة الحالية للهواتف المحمولة وتقنية استرجاع المعلومات لتحقيق محرك بحث على شبكة الإنترنت المحمول يمكنه التعرف بنجاح على الأحرف الصينية في الصورة ، بهدف الحصول على المعلومات التي تريدها من الصور بسرعة أكبر ودقة.
مع التطوير السريع للإنترنت ووصول البيانات الضخمة ، يعتمد الأشخاص بشكل متزايد على البيانات والمعلومات. ومع ذلك ، فإن بيانات الإنترنت اليوم كبيرة جدًا ، وكانت هناك دائمًا مشاكل كبيرة في دقة البيانات وتصنيف البيانات المعقول. في ضوء هذا الموقف ، يأمل المزيد والمزيد من الناس في إيجاد طريقة أكثر ملاءمة للحصول على بيانات دقيقة في العمل والحياة اليومية ، وإيجاد طريقة للعثور على المعلومات التي يبحثون عنها بشكل أكثر كفاءة. في الوقت نفسه ، مع شعبية الهواتف الذكية ، يعتاد المزيد والمزيد من الأشخاص على استخدام أساليب فعالة للغاية مثل التقاط الصور لاستبدال أساليب النسخ والكتابة السابقة لتسجيل البيانات التي يجب تسجيلها في الحياة والعمل. مستوحاة من هذا ، أريد استخدام تقنية OCR (التعرف على الأحرف البصرية) الأكثر نضجًا في الوقت الحالي ، بالإضافة إلى تقنية تطوير الإنترنت الشائعة الحالية وتقنية استرجاع المعلومات لتحقيق محرك بحث على شبكة الإنترنت يمكنه التعرف بنجاح على خطوط لغة الصورة. يهدف إلى البحث عن المزيد من الأصدقاء من الصور بسرعة أكبر ودقة من خلال أساليب مريحة مثل التقاط الصور ولقطات الشاشة.
تنقسم بنية الخلفية بشكل أساسي إلى ثلاث وحدات رئيسية: وحدة OCR ، وحلدة محرك البحث ، ووحدة الوسيطة الوسيطة للرسالة PHP.
``` shell
brew install tesseract
```
```shell
sudo xcodebuild -license
...
agree
```
``` shell
brew install tesseract
```
```shell
Usage:tesseract imagename outputbase [-l lang] [-psm pagesegmode] [configfile...]
pagesegmode values are:
0 = Orientation and script detection (OSD) only.
1 = Automatic page segmentation with OSD.
2 = Automatic page segmentation, but no OSD, or OCR
3 = Fully automatic page segmentation, but no OSD. (Default)
4 = Assume a single column of text of variable sizes.
5 = Assume a single uniform block of vertically aligned text.
6 = Assume a single uniform block of text.
7 = Treat the image as a single text line.
8 = Treat the image as a single word.
9 = Treat the image as a single word in a circle.
10 = Treat the image as a single character.
-l lang and/or -psm pagesegmode must occur before anyconfigfile.
```
في:
tesseract imagename outputbase [-l lang] [-psm pagesegmode] [configfile...] يشير إلى tesseract 图片名输出文件名-l 字库文件-psm pagesegmode 配置文件.
على سبيل المثال: tesseract code.jpg result -l chi_sim -psm 7 nobatch
-l chi_sim يعني استخدام مكتبة الخطوط الصينية المبسطة (تحتاج إلى تنزيل ملف مكتبة الخطوط الصينية ، وإزالة ضغطه ، وتخزينه في دليل tessdata . تمديد ملف الخط هو .raineddata اسم ملف مكتبة الخطوط الصينية المبسطة: chi_sim.traineddata ).-psm 7 يعني إخبار Tesseract code.jpg أن الصورة هي سطر نص. يمكن أن تقلل هذه المعلمة من معدل خطأ التعرف. الافتراضي هو 3 .** اختبار الخط الإنجليزي: **
** اختبار الخط الصيني: **
الآن دعنا نبني مكتبة لغة الخط وتدريب بيانات عينة لغة الخط
**font_properties (new in 3.01)**
A new requirement for training in 3.01 is a font_properties file. The purpose of this file is to provide font style information that will appear in the output when the font is recognized. The font_properties file is a text file specified by the -F filename option to mftraining.
Each line of the font_properties file is formatted as follows:
<fontname> <italic> <bold> <fixed> <serif> <fraktur>
where <fontname> is a string naming the font (no spaces allowed!), and <italic>, <bold>, <fixed>, <serif> and <fraktur> are all simple 0 or 1 flags indicating whether the font has the named property.
When running mftraining, each .tr filename must match an entry in the font_properties file, or mftraining will abort. At some point, possibly before the release of 3.01, this matching requirement is likely to shift to the font name in the .tr file itself. The name of the .tr file may be either fontname.tr or [lang].[fontname].exp[num].tr.
**Example:**
font_properties file:
timesitalic 1 0 0 1 0
shapeclustering -F font_properties -U unicharset eng.timesitalic.exp0.tr
mftraining -F font_properties -U unicharset -O eng.unicharset eng.timesitalic.exp0.tr
Note that in 3.03, there is a default font_properties file, that covers 3000 fonts (not necessarily accurately) in training/langdata/font_properties.
**Clustering**
When the character features of all the training pages have been extracted, we need to cluster them to create the prototypes.
The character shape features can be clustered using the shapeclustering, mftraining and cntraining programs:
**shapeclustering (new in 3.02)**
shapeclustering should not be used except for the Indic languages.
shapeclustering -F font_properties -U unicharset lang.fontname.exp0.tr lang.fontname.exp1.tr ...
shapeclustering creates a master shape table by shape clustering and writes it to a file named shapetable.
**mftraining**
mftraining -F font_properties -U unicharset -O lang.unicharset lang.fontname.exp0.tr lang.fontname.exp1.tr ...
The -U file is the unicharset generated by unicharset_extractor above, and lang.unicharset is the output unicharset that will be given to combine_tessdata.
mftraining will output two other data files: inttemp (the shape prototypes) and pffmtable (the number of expected features for each character). In versions 3.00/3.01, a third file called Microfeat is also written by this program, but it is not used. Later versions don't produce this file.
NOTE: mftraining will produce a shapetable file if you didn't run shapeclustering. You must include this shapetable in your traineddata file, whether or not shapeclustering was used.
**cntraining**
cntraining lang.fontname.exp0.tr lang.fontname.exp1.tr ...
This will output the normproto data file (the character normalization sensitivity prototypes).
ويكي الرسمية
التوجيه الصيني
على Mac ، استخدم Spotlight لتمكين المحطة الطرفية
vi /etc/profile
في هذا الوقت ، اضغط على الحرف I على لوحة المفاتيح لإدخال وضع التحرير ، وأدخل الخطين التاليين من الأمر أسفل المحطة:
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_77
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
ثم اضغط على ESC لإنهاء التحرير ، ثم أدخل: WQ! مخرج
source /etc/profile
java -version
إذا ظهرت معلومات إصدار Java ، فإن ذلك يثبت أن التثبيت ناجح!
مقدمة: عندما يصبح مشروع التعليمات البرمجية كبيرًا ، في كل مرة يتم فيها إعادة ترجمة ، تعبئتها ، تم اختبارها ، وما إلى ذلك ، يصبح معقدًا للغاية ومتكررًا. لذلك ، هناك نصوص مصنوعة في لغة C للمساعدة في إكمال هذه المهام على دفعات. التطبيقات في Java مستقلة عن النظام الأساسي ، وبالطبع لن تستخدم البرامج النصية المتعلقة بالمنصة لإكمال هذه المهام الدفعة. ANT نفسه هو محرك البرنامج النصي للعملية ، والذي يستخدم لأتمتة برنامج المكالمات لإكمال التجميع ، والتغليف ، واختبار المشاريع ، وما إلى ذلك ، بالإضافة إلى كونه مستقلاً للمنصة استنادًا إلى Java ، يعتمد تنسيق البرنامج النصي على XML ، وهو أمر أسهل في الحفاظ عليه من صنع النصوص.
اختيار الإصدار: Apache-ant-1.9.6-bin.zip
عنوان التنزيل: موقع ANT الرسمي
ابدأ التثبيت:
sudo sh
cd /usr/local/
chown YourUserName:staff apache-ant-1.9.6
ln -s apache-ant-1.9.6 ant
vi /etc/profile
في هذا الوقت ، اضغط على الحرف I على لوحة المفاتيح لإدخال وضع التحرير ، وأدخل الخطين التاليين من الأمر أسفل المحطة:
export ANT_HOME=/usr/local/ant
export PATH=${PATH}:${ANT_HOME}/bin
ثم اضغط على ESC لإنهاء التحرير ، ثم أدخل: WQ! مخرج
source /etc/profile
ant -version
يظهر Apache Ant (TM) الإصدار 1.9.6 الذي تم تجميعه على ... يثبت هذا الشاشة أن التثبيت ناجح!
مقدمة: حاليًا ، يتم تقسيم Nutch إلى نسختين كبيرتين 1.x و 2.x. يطور أباتشي بشكل مستقل ويحافظ على هذين الإصدارين الكبيرين. من بينها ، فإن الفرق الأكبر بين 1.x و 2.x هو أن 1.x يعتمد على نظام ملفات HDFS Hadoop ، بينما يقوم 2.x بإجراء طبقة تخزين البيانات ويمكنها حفظ البيانات في قواعد البيانات مثل HBase و MySQL. شيء مهم آخر هو أنه تم إصدار Nutch كمحرك بحث كامل في 1.2 وقبل ذلك. منذ 1.3 ، Nutch نفسها لديها وظائف الزحف فقط. إذا كان من الضروري فهرسة البيانات المزروعة والبحث فيها ، فمن الضروري أيضًا استخدام خادم البحث عن النص الكامل SOLR. نظرًا لأن كل من Nutch و Solr يتم تطويرهما على أساس Lucene ، يمكن فهرسة البيانات التي يتم زحفها بواسطة Nutch بسهولة في Solr. يمكن لموقع Nutch الرسمي تنزيل حزمة 1.x المترجمة ، ولكن 2.x يوفر فقط التعليمات البرمجية المصدر ويجب تجميعه من قبل نفسك. تم بناء Nutch باستخدام ANT. إذا قمت بتجميعها بنفسك ، فأنت بحاجة إلى تثبيت ANT لتجميع رمز المصدر. فيما يتعلق بكيفية اختيار إصدار Nutch ، فإننا نفكر بشكل أساسي في المشكلات التالية: إذا كنت بحاجة فقط إلى الزحف عددًا صغيرًا من مواقع الويب وفهرستها ، فيمكنك استخدام 1.x و 2.x ، ويمكنك حتى استخدام مستقلة دون الحاجة إلى موزعات موزعة. ولكن إذا كنت ترغب في زحف عدد كبير من مواقع الويب ، أو حتى الزحف على الويب بأكمله ، فمن الأفضل اختيار 1.x واستخدام الموزع ، لأن 1.x يعتمد على نظام ملفات Hadoop ، والذي تم إنشاؤه خصيصًا لمعالجة البيانات الضخمة. إذا كنت تستخدم 2.x عند الزحف بعدد كبير من مواقع الويب ، فقد تواجه بعض مشاكل الأداء. إذا كنت تستخدم MySQL لتخزين البيانات ، فسيكون الأداء كابوسًا عندما تتجاوز بيانات صفحة الويب عشرات المليارات. لقد تغيرت إصدارات مختلفة من nutch1.x أيضًا كثيرًا ، وقد خضع تنفيذ الأوامر إلى تغييرات كبيرة. لذلك ، يوصى بتنزيل المبتدئين الإصدار 1.10 المقابل من هذا البرنامج التعليمي. عندما تكون على دراية باستخدام Nutch ، لن يكون لهذه التغييرات تأثير كبير عليك. Nutch هي واحدة من أكثر زحفات المصادر المفتوحة شعبية اليوم ، وقد استخدمت على نطاق واسع من قبل الشركات. تتيح آلية المكونات الإضافية لـ Nutch للمطورين تخصيص استراتيجيات تزحف الويب بمرونة. يتمتع Nutch بتاريخ طويل ، وتم تطوير Hadoop الشهير اليوم من Nutch. لا يمكن أن يعمل Nutch في وضع مستقل ، ولكن أيضًا في الوضع الموزع. يدعم Nutch العمل فقط في بيئات Linux ، بحيث يمكن استخدامه مباشرةً تحت OS X-Like Like.
اختيار الإصدار: Apache-Nutch-1.10-Src.zip
عنوان التنزيل: موقع Nutch الرسمي
ابدأ التثبيت:
unzip apache-nutch-1.10-src.zip
cd apache-nutch-1.10
vi conf/nutch-default.xml
ابحث عن السمة http.agent.name ، ونسخها إلى conf/nutch-site.xml ، وقم بتعديل قيمة القيمة حتى لا تكون فارغة. فيما يلي تخصيص مثل: HD Nutch Agent ، ثم تواصل في زحف الأمر ، سيقوم الأمر بالإبلاغ عن خطأ. إن nutch-site.xml المعدلة كما يلي:
<configuration>
<property>
<name>http.agent.name</name>
<value>myNutch</value>
<description>HTTP 'User-Agent' request header. MUST NOT be empty -
please set this to a single word uniquely related to your organization.
NOTE: You should also check other related properties:
http.robots.agents
http.agent.description
http.agent.url
http.agent.email
http.agent.version
and set their values appropriately.
</description>
</property>
</configuration>
يتم استخدام السمة http.agent.name للاحتفال بالزحفات ، بحيث يمكن لموقع الويب الزاحف التعرف عليها.
ستتجاوز الخصائص التي تم تكوينها في nutch-site.xml الخصائص الافتراضية في nutch-default . هنا نقوم فقط بتعديل السمة http.agent.name ، ولن يتم إجراء أي تغييرات على الآخرين.
في هذه المرحلة ، قمنا بتكوين Nutch ، ثم قم بتجميع الكود المصدري باستخدام الأمر التالي في دليل Nutch Home.
قم بالتبديل إلى دليل Nutch Home للتنفيذ:
ant
ستستغرق عملية التجميع الأولى الكثير من الوقت لأن المزيد من حزم التبعية تحتاج إلى تنزيل. يعتمد الوقت المحدد على حالة الشبكة الفعلية. يستغرق 5-10 دقائق إذا كان سريعًا ، وأكثر من 20 دقيقة إذا كان بطيئًا.
سيتم الإبلاغ عن التحذير التالي في بداية التجميع:
لا يمكن تحميل تعريفات من الموارد ORG/Sonar/Ant/Antlib.xml. لا يمكن العثور عليها.
هذا التحذير لا يؤثر على نتيجة التجميع ويمكن تجاهله.
قد تكون هناك أيضًا مشكلة في الشبكة أثناء عملية التجميع. تحتاج فقط إلى استخدام الأمر التالي لمسح نتيجة التجميع الأخيرة (لن يتم حذف حزمة التبعية التي تم تنزيلها بالفعل):
ant clean
في حالة الشبكة السيئة ، قد تتكرر الخطوتين أعلاه عدة مرات.
عندما تظهر معلومات مماثلة ، فهذا يعني أن التجميع ناجح:
بناء ناجح
إجمالي الوقت: 1 دقيقة 7 ثوان
كما هو مبين في الشكل أدناه:
بعد تجميع Nutch بنجاح ، سيتم إنشاء مجلد وقت التشغيل في الدليل المنزلي. أنه يحتوي على اثنين من المجلدات الفرعية النشر والمحلية. يتم استخدام Deploy للزحف الموزعة ، بينما يتم استخدام محلي للزحف المحلي المستقل. يشرح هذا القسم أولاً استخدام الزحف المحلي المستقل ، ويتم وضع الزحف الموزعة في البرنامج التعليمي اللاحق.
أدخل المجلد المحلي ثم أدخل مجلد Bin. يوجد ملفان نصون ، أحدهما نوتش والآخر هو الزحف. من بينها ، يحتوي Nutch على جميع الأوامر المطلوبة ، ويستخدم الزحف بشكل رئيسي في زحف واحد.
كما هو مبين في الشكل أدناه:
unzip solr-4.10.4.zip
احصل على المجلد SOLR-4.10.4 ، انسخ وقت التشغيل/المحلي/conf/schema-solr4
cp apache-nutch-1.10/runtime/local/conf/schema-solr4.xml solr-4.10.4/example/solr/collection1/conf
حذف ملف Schema.xml الأصلي لـ Solr:
rm –f solr-4.10.4/example/solr/collection1/conf/schema.xml
والتعليق على المخطط solr4.xml
<copyField source="latLon" dest="location"/>
إعادة تسمية SCHEMA-SOLR4.XML إلى SCHEMA.XML:
mv solr-4.10.4/example/solr/collection1/conf/ schema-solr4.xml solr-4.10.4/example/solr/collection1/conf/ schema.xml
في هذه المرحلة ، يتم تكوين SOLR وإدخال دليل SOLR-4.10.4/مثال:
cd solr-4.10.4/example
ابدأ Solr:
في هذا الوقت ، يمكنك الوصول إلى المنفذ 8983 من خلال المتصفح وعرض واجهة التحكم في SOLR:
http: // localhost: 8983/solr
أدخل دليل Nutch Home ، معظم الأوامر التي نقوم بتنفيذها في دليل Nutch Home ، بدلاً من دليل Bin ، لأن هذا يمكن أن ينفذ بعض الأوامر المعقدة بشكل أكثر ملاءمة. تحقق من أمر الزحف واحد:
bin/crawl
bin/nutch
يوضح إدخال الأوامر أعلاه أساليب الاستخدام الخاصة بهما. سيتم شرح عدد قليل من الأوامر شائعة الاستخدام بالتفصيل لاحقًا ، كما هو موضح في الشكل أدناه:
تحقق من كيفية استخدام الزحف:
-i | يتم استخدام الفهرس لإخبار NUCCH لإضافة النتيجة الزحف إلى الفهرس المكون.
-D يتم استخدامه لتكوين المعلمات التي تم تمريرها إلى مكالمة Nutch ، يمكننا تكوين المفهرس هنا.
دليل ملف بذرة البذور ، يستخدم لتخزين عنوان URL للبذور ، أي عنوان URL الذي يزحف الزاحف في البداية.
زحف مسار تخزين DIR لزحف البيانات.
NUM ROOPS LOOP CRAWLS.
مثال على الاستخدام:
أدخل وقت تشغيل/الدليل المحلي لـ Nutch وإنشاء مجلد URLS جديد:
قم بإنشاء ملف بذرة جديد يخزن عناوين URL في مجلد urls ، Seed.txt
أضف عنوان URL للزحف الأولي إلى urls/seed.txt: http://www.163.com
قم بتشغيل خدمة SOLR ، وإلا لا يمكن إنشاء الفهرس بشكل طبيعي في SOLR
bin/crawl -i -D solr.server.url=http://localhost:8983/solr/ urls/ TestCrawl/ 2
في هذا الأمر ، أطلب من الزاحف إضافة الزاحف إلى الفهرس المحدد. solr.server.url = http: // localhost: 8983/solr/هو عنوان مفهرس solr ، urls/هو مسار ملف url البذور ، واختبار هو المجلد الذي يستخدمه Nutch لتخزين بيانات الزاحف (بما في ذلك عنوان URL ، المحتوى المجهول ، إلخ). المعلمة 2 هنا تعني حلقة الزحف مرتين.
من خلال تنفيذ الأمر أعلاه ، يمكنك البدء في زحف صفحة الويب. أدخل http: //: 8983/solr في المتصفح ، حدد Collection1 ، ويمكنك البحث عن المحتوى المفهرس من خلال الكلمات الرئيسية. تجدر الإشارة هنا إلى أن الزاحف لم يزحف جميع صفحات عنوان URL المحدد. للحصول على طريقة محددة لعرض الوضع الزحف ، يرجى الرجوع إلى الزحف الموزع أدناه.
بعد نجاح الزحف ، يظهر الشكل التالي في الشكل التالي:
في بعض الأحيان ، لا يمكن لزحف واحد لتلبية احتياجاتنا بشكل جيد. لذلك ، هنا سأقدم طريقة الزحف الموزعة: تحتوي عملية الزحف الفعلية للزحف الموزعة على أوامر متعددة. من أجل تبسيط العمليات ، يجمع الزحف بين أوامر متعددة معًا ويوفرها للمستخدمين. إذا كنت ترغب في تعلم تقنية Nutch Crawler بتعمق ، فهذا لا يكفي فقط لاستخدام أمر الزحف. تحتاج أيضًا إلى أن تكون على دراية بعملية الزحف. تحتاج هنا إلى استخدام معلومات URL المحفوظة في Seed.txt في البرنامج التعليمي السابق. تحتاج أيضًا إلى حذف المحتويات تحت مجلدات البيانات/CRAWLDB و DATA/LINKDB ومجلدات البيانات/القطاعات ، لأننا نحتاج إلى إعادة صياغة البيانات بخطوات.
بعد تنفيذ أمر الزحف ، سيتم إنشاء مجلد TestCrawl ضمن وقت التشغيل/محلي من Nutch ، والذي يحتوي على ثلاثة مجلدات: Crawldb و LinkDB والقطاعات.
CRAWLDB: يحتوي على جميع عناوين URL التي عثر عليها Nutch ، والتي تحتوي على معلومات حول ما إذا كان عنوان URL قد تم زحفه وعندما يزحف.
LinkDB: يحتوي على جميع الروابط المقابلة لعنوان URL في Crawldb اكتشفه Nutch ، وكذلك عنوان URL المصدر ونص المرساة.
الأجزاء: يحتوي على مجلدات قطاع متعددة سميت بعد الوقت. كل قطعة عبارة عن وحدة تزحف ، تحتوي على سلسلة من عناوين URL ، وكل قطعة تحتوي على المجلدات التالية:
crawl_generate:待抓取的URL
crawl_fetch:每个URL的抓取状态
content:从每个URL抓取到的原始内容
parse_text:从每个URL解析得到的文本
parse_data:从每个URL解析得到的外链和元数据
crawl_parse:包含外链URL,用来更新crawldb
bin/nutch inject data/crawldb urls
من أجل زحف الصفحة بعنوان URL المحدد ، نحتاج إلى إنشاء قائمة زحف من قاعدة البيانات (CRAWLDB):
bin/nutch generate data/crawldb data/segments
بعد تنفيذ أمر إنشاء ، سيتم إنشاء قائمة بالصفحات المراد زحفها ، وسيتم تخزين قائمة الزحف في مسار قطاع تم إنشاؤه حديثًا. تم تسمية مجلد القطاع وفقًا للوقت الذي تم إنشاؤه فيه (اسم المجلد لهذا البرنامج التعليمي هو 201507151245).
هناك العديد من المعلمات الاختيارية لإنشاء ، يمكن للقراء مشاهدتها بمفردهم من خلال الأوامر التالية (وينطبق الشيء نفسه على الأوامر الأخرى):
bin/nutch generate
قم بالزحف إلى صفحة الويب وفقًا لقائمة الزحف التي تم إنشاؤها بواسطة إنشاء:
bin/nutch fetch data/segments/201507151245 #这里的201507151245为文件夹名,需要根据自己的情况进行更改,或者直接采用data/segments文件夹,这样的操作对segments文件夹下的所有子文件夹生效,后文同理。
bin/nutch parse data/segments/201507151245
قم بتحديث قاعدة البيانات بناءً على النتائج المزروعة:
bin/nutch updated data/crawldb –dir data/segments/201507151245
تحتوي قاعدة البيانات الآن على جميع نقاط الإدخال بعد تحديث الصفحة الأولية ، بالإضافة إلى نقاط إدخال جديدة للصفحات المكتشفة حديثًا من المجموعة الأولية.
قبل إنشاء فهرس ، نقلب أولاً جميع الروابط حتى نتمكن من فهرسة نص مرساة المصدر للصفحة.
bin/nutch invertlinks data/linkdb –dir data/segments/201507151245
ابدأ خدمة SOLR ، والآن نقوم بفهرسة الموارد الزحف:
bin/nutch index data/crawldb -linkdb data/linkdb -params solr.server.url=http://localhost:8983/solr -dir data/segments/201507151245
بمجرد إنشاء فهرس النص الكامل ، يجب أن يعالج عناوين URL مكررة بحيث يكون عنوان URL فريدًا:
bin/nutch dedup
يبحث هذا الأمر عن عناوين URL المكررة بناءً على التوقيعات. بالنسبة إلى عناوين URL المكررة التي تم وضع علامة عليها باسم status_db_duplicate ، فإن مهام التنظيف والفهرسة ستحذفها وفقًا للعلامة.
bin/nutch clean –D solr.server.url=http://192.168.1.11:8983/solr data/crawldb
قم بإزالة HTTP301 ، 404 والوثائق المكررة من SOLR.
حتى الآن ، أكملنا جميع الخطوات الزحف باستخدام الزحف خطوة بخطوة. تحت الزحف العادي ، يمكننا البحث في http: // localhost: 8983/solr.
تستخدم لقراءة أو تصدير قاعدة بيانات الزحف الخاصة بـ Nutch ، والتي تستخدم عادة لعرض معلومات حالة قاعدة البيانات وعرض استخدام readdb:
Usage: CrawlDbReader <crawldb> (-stats | -dump <out_dir> | -topN <nnnn> <out_dir> [<min>] | -url <url>)
<crawldb>directory name where crawldb is located
-stats [-sort] print overall statistics to System.out
[-sort]list status sorted by host
-dump <out_dir> [-format normal|csv|crawldb]dump the whole db to a text file in <out_dir>
[-format csv]dump in Csv format
[-format normal]dump in standard format (default option)
[-format crawldb]dump as CrawlDB
[-regex <expr>]filter records with expression
[-retry <num>]minimum retry count
[-status <status>]filter records by CrawlDatum status
-url <url>print information on <url> to System.out
-topN <nnnn> <out_dir> [<min>]dump top <nnnn> urls sorted by score to <out_dir>
[<min>]skip records with scores below this value.
This can significantly improve performance.
هنا CRAWLDB هي قاعدة البيانات التي توفر معلومات عناوين URL. -stats تعني عرض معلومات الحالة الإحصائية ، -DUMP تعني تصدير المعلومات الإحصائية ، ويعني عنوان URL عرض معلومات عنوان URL المحدد ، وعرض معلومات حالة قاعدة البيانات:
النتائج الإحصائية التي تم الحصول عليها على النحو التالي:
MacBook-Pro:local root# bin/nutch readdb TestCrawl/crawldb -stats
CrawlDb statistics start: TestCrawl/crawldb
Statistics for CrawlDb: TestCrawl/crawldb
TOTAL urls: 290
retry 0: 290
min score: 0.0
avg score: 0.017355172
max score: 1.929
status 1 (db_unfetched): 270
status 2 (db_fetched): 17
status 3 (db_gone): 2
status 4 (db_redir_temp): 1
CrawlDb statistics: done
يمثل إجمالي عناوين URL العدد الإجمالي لعنوان URL ، ويمثل إعادة المحاولة عدد أوقات إعادة المحاولة ، ودرجة MINS هي أدنى درجة ، ودرجة أقصى درجة هي أعلى درجة ، والحالة 1 (DB_UNFEGTED) هي الرقم غير المزروع ، والحالة 2 (DB_FETED) هي الرقم.
يتم استخدام readLinkDB لتصدير جميع عناوين URL ونص المرساة ، وعرض الاستخدام:
Usage: LinkDbReader <linkdb> (-dump <out_dir> [-regex <regex>]) | -url <url>
-dump <out_dir>dump whole link db to a text file in <out_dir>
-regex <regex>restrict to url's matching expression
-url <url>print information about <url> to System.out
معلمات التفريغ وعنوان URL هنا هي نفس أمر READDB ، تصدير البيانات:
bin/nutch readlinkdb data/linkdb -dump linkdb_dump
استيراد البيانات إلى مجلد LinkDB_DUMP وعرض معلومات البيانات المصدرة:
cat linkdb_dump /*
يمكنك أن ترى أن المعلومات المصدرة تشبه التنسيق التالي:
fromUrl: http://www.sanesee.com/article/step-by-step-nutch-introduction anchor: http://archive.apache.org/dist/nutch/
وهذا هو ، يتم تسجيل عنوان URL المصدر.
يتم استخدام RETSEG لعرض البيانات أو تصديرها في القطاع وعرض الاستخدام:
Usage: SegmentReader (-dump ... | -list ... | -get ...) [general options]
* General options:
-nocontentignore content directory
-nofetchignore crawl_fetch directory
-nogenerateignore crawl_generate directory
-noparseignore crawl_parse directory
-noparsedataignore parse_data directory
-noparsetextignore parse_text directory
* SegmentReader -dump <segment_dir> <output> [general options]
Dumps content of a <segment_dir> as a text file to <output>.
<segment_dir>name of the segment directory.
<output>name of the (non-existent) output directory.
* SegmentReader -list (<segment_dir1> ... | -dir <segments>) [general options]
List a synopsis of segments in specified directories, or all segments in
a directory <segments>, and print it on System.out
<segment_dir1> ...list of segment directories to process
-dir <segments>directory that contains multiple segments
* SegmentReader -get <segment_dir> <keyValue> [general options]
Get a specified record from a segment, and print it on System.out.
<segment_dir>name of the segment directory.
<keyValue>value of the key (url).
Note: put double-quotes around strings with spaces.
بيانات قطاع التصدير:
bin/nutch readseg -dump data/segments/20150715124521 segment_dump
استيراد البيانات إلى مجلد SPISTING_DUMP لعرض معلومات البيانات المصدرة:
cat segment_dump /*
يمكنك أن ترى أنه يحتوي على معلومات محددة للغاية لصفحة الويب.
يمكنك استخدام WAMP/MAMP ، أو PHPSTORM وخادمه المدمج.
لعمليات محددة ، يرجى الرجوع إلى: البوابة
افتح المحطة الطرفية وتبول إلى مسار المشروع الخاص بك:
composer require silex/silex twig/twig thiagoalessio/tesseract_ocr:dev-master نظرًا لأننا نستخدم Silex Framework ، نحتاج إلى إنشاء بنية مشروع PHP Engineering Project MVC (الجمهور ، التحميلات ، المشاهدات) ، كما هو موضح في الشكل:
<?php
//如果是在WAMP等其他集成环境下,需要重新获取环境变量的PATH,不然无法调用Tesseract
$ path = getenv ( ' PATH ' );
putenv ( " PATH= $ path :/usr/local/bin " );
require __DIR__ . ' /../vendor/autoload.php ' ;
use Symfony Component HttpFoundation Request ;
$ app = new Silex Application ();
$ app -> register ( new Silex Provider TwigServiceProvider (), [
' twig.path ' => __DIR__ . ' /../views ' ,
]);
$ app [ ' debug ' ] = true ;
$ app -> get ( ' / ' , function () use ( $ app ) {
return $ app [ ' twig ' ]-> render ( ' index.twig ' );
});
$ app -> post ( ' / ' , function ( Request $ request ) use ( $ app ) {
//TODP
});
$ app -> run (); // Grab the uploaded file
$ file = $ request -> files -> get ( ' upload ' );
// Extract some information about the uploaded file
$ info = new SplFileInfo ( $ file -> getClientOriginalName ());
// 产生随机文件名来减少文件名冲突
$ filename = sprintf ( ' %d.%s ' , time (), $ info -> getExtension ());
// Copy the file
$ file -> move ( __DIR__ . ' /../uploads ' , $ filename );** عملية التفاعل: **
1) يدخل المستخدمون عنوان URL لموقع الويب الخاص بالصفحة الرئيسية ، أدخلوا الصفحة الرئيسية ، والتمتع بالخدمة ، والتعرف على تفاصيل الخدمة.
2) يقوم المستخدم بتحميل صور البحث المطلوبة من خلال مربع البحث والمعاينة قبل التحميل.
3) بعد أن يؤكد المستخدم أن الصورة التي تم تحميلها صحيحة ، انقر فوق زر البحث في الصورة لتحميل الصورة وتحديدها. نظرًا لأن هذا الجزء من جانب الخادم يحتوي على كمية كبيرة من الحساب ، فإنه يستغرق 2-5 ثوانٍ لإرجاع النتيجة ، بحيث يتم تقديم المستخدم مع صفحة تحميل.
4) يتم الانتهاء من التعرف على الصور ، وتختفي صفحة التحميل ، ويتم إدخال صفحة تأكيد معاينة نتائج التعرف.
5) بعد أن يؤكد المستخدم المحتوى ، يمكنه النقر فوق البحث لإدخال وحدة محرك البحث للحصول على نتائج البحث.
يحتل التصميم المرئي مكونًا مهمًا للغاية في تكوين المنتج ، والذي يؤثر بشكل مباشر على الانطباع الأولي للمستخدم عن المنتج ، والتجربة أثناء الاستخدام ، والانطباع النهائي المتبقي ، وما إلى ذلك ، حتى في كثير من الحالات ، يعتمد نجاح أو فشل المنتج غالبًا على تجربة التصميم البصري الناجح. بالنسبة لهذا التصميم ، لم أعتبره نظامًا يمكنه التعامل مع الأشياء ، ولكن كمنتج قمت بإنشائه بعناية. لذلك ، أولي اهتمامًا كبيرًا للتصميم البصري الواجهة الواجهة وتجربة المستخدم لهذا النظام. لتحديد الألوان على الموقع بأكمله ، اخترت ألوان موضوع محرك بحث Baidu والتي يتم التعرف عليها أكثر من قبل الجمهور والأحمر والأزرق. تستخدم خلفية الصفحة الرئيسية ألوان الانتقال الأحمر والأزرق ، وتعدل الشفافية. يتم رسمه من خلال رمز CSS ، الذي يوفر وقت التحميل ويمنح المستخدمين تأثيرًا بصريًا جيدًا. في الوقت نفسه ، تمت إضافة وصف النص للصفحة الرئيسية إلى الظل السفلي ويستخدم الخطوط السوداء الرقيقة Microsoft لجعل المرئي أكثر طبقة. يزيد مربع البحث عن الصور ومربع المعاينة من الظل أيضًا ، ويتم تمييز الألوان المختلفة وتمييز اللوني لأهمية حقل المعاينة. يجعل المستخدم منعشًا وموجزًا بصريًا ، ويمكنه العثور على المعلومات التي تحتاجها في أقرب وقت ممكن. بعد ذلك ، سوف يمر عبر صفحة تحميل بسيطة. هنا ، يتم صنع دائرة انتظار للتكبير والخروج ، بحيث لا يشعر المستخدم بالغضب بسبب وقت الانتظار. في الوقت نفسه ، يخبر المستخدم أن خلفية النظام تقوم بإجراء الحسابات وتشغيلها. عند القفز إلى صفحة نتائج الاعتراف ، لا تزال جميع ألوان النص وأحجام الخطوط معدلة بصريًا وفقًا لأهمية النسخة ، بحيث لا يتعين على المستخدم قضاء الكثير من الوقت في تصفية المعلومات المهمة. يميل الجدولة واختيار اللون للزرين أيضًا إلى زيادة الرغبة والشعور بالنقر ، مما يدفع المستخدم إلى إجراء العملية التالية. بالنسبة لصفحة نتائج البحث النهائية ، قمت بتصميمها في فصل مشابه للكتاب. تحتوي كل قائمة على جدولة مختلفة وحجم تعديلات ألوان حجم استنادًا إلى عنوان صفحة الويب لنتائج البحث ، وملخص صفحة الويب ، ووقت التضمين ، والوزن ، لزيادة التأثير المرئي والتعرف. إنه يجعل المستخدمين يشعرون بأن لديهم بعض القواسم المشتركة مع محركات البحث الجماعي ، لكنهم يكشفون عن بعض شخصياتهم الخاصة ، ويمنح المستخدمون تجربة مألوفة وجديدة ، ويحتفظون أيضًا بخصائص معلومات التداخل المنعشة وخالية من الإعلانات وغير الضرورية. علاوة على ذلك ، تجمع جميع التصميمات المرئية بين مفهوم التصميم الحالي المستجيب ، ولديها تجربة مستخدم جيدة ومؤثرات مرئية على كل من أجهزة الكمبيوتر الشخصية والهاتف المحمول.
** كتابة قالب باستخدام الغصين: **
تظهر التجربة الأمامية في الشكل أدناه:
يعتمد بشكل أساسي على Bootstrap 3.4 ، ويمكن تعبئته باستخدام XDK/PhoneGap وتجميعه في تطبيق NA المقابل ونشره إلى سوق التطبيقات. تظهر تجربة الهاتف المحمول في الشكل أدناه:
شكرا لجميع المعلمين وجميع زملاء الدراسة الذين ساعدوني في السنوات الأربع من الكلية. علموني المعرفة المهنية. خلال السنوات الأربع الماضية من الدراسة والبحث العلمي ، لم يصل بنية المعرفة الخاصة بي وقدرتي البحثية العلمية فقط إلى مستوى جديد ، ولكن الأهم من ذلك ، تم دمجها في المجتمع ومنحت لي تجربة تدريب داخلي كامل ، مما يتيح لي تجربة العديد من تجارب عمل شركة الإنترنت التي لا يمكن لطلاب الدراسات العليا تجربة الدراسات الجامعية. في غمضة عين ، تقترب أربع سنوات من الكلية. عندما أكملت أطروحة التخرج هذه بمزاج عصبي ، تغيرت أيضًا من طفل جاهل إلى شاب ناضج. نفس الشيء - فقط العرق لن يخدعك. أخيرًا ، شكرًا لجامعة العلوم والتكنولوجيا الإلكترونية ، كل شخص قابلته في الجامعة ، وأشكر نفسي على أعمالي الشاقة الأربع.
https://github.com/daijiale/ocr_fontssearchengine.
http://v.youku.com/v_show/id_xmtyzndy2ndyxng==.html.