이미지 인식 OCR 기술, 기계 학습 및 간단한 검색 엔진 구성과 관련된 기술 블로그입니다. 졸업 프로젝트를 수행하는 동안 매일 연구 결과와 경험을 계속 녹음하는 곳입니다.
OCR (Optical Charac
Tesseract의 OCR 엔진은 1985 년 HP Labs에 의해 처음 개발되었으며 1995 년까지 OCR 산업에서 가장 정확한 세 가지 식별 엔진 중 하나가되었습니다. 그러나 HP는 곧 OCR 사업을 포기하기로 결정했으며 TesserAct도 헛된 상태를 유지했습니다. 몇 년 후, HP는 TesserAct를 선반에 올려 놓는 대신 오픈 소스 소프트웨어 산업에 기여하고 활력을 되 찾는 것이 더 나을 것이라는 점을 깨달았습니다. 2005 년 TesserAct는 미국의 네바다 정보 기술 연구소에서 얻었으며 Google에서 버그를 개선하고, TesserAct를 최적화하려고 노력했습니다. TesserAct는 Google 프로젝트에서 오픈 소스 프로젝트로 출시되었으며 최신 버전 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에서는 스포트라이트를 사용하여 터미널을 활성화하십시오
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의 응용 프로그램은 플랫폼 독립적이며 물론 플랫폼 관련 Make 스크립트를 사용하여 이러한 배치 작업을 완료하지 않습니다. ANT 자체는 이러한 프로세스 스크립트 엔진으로, 호출 프로그램을 자동화하여 컴파일, 포장, 프로젝트 테스트 등을 완료하는 데 사용되는 이러한 프로세스 스크립트 엔진입니다. Java를 기반으로 플랫폼 독립적 일뿐 만 아니라 스크립트 형식은 XML을 기반으로하며 스크립트를 만드는 것보다 유지하기가 더 쉽습니다.
버전 선택 : Apache-ant-1.9.6-bin.zip
주소 다운로드 : 개미 공식 웹 사이트
설치 시작 :
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로 나뉩니다. Apache는 독립적 으로이 두 개의 큰 버전을 개발하고 유지 관리합니다. 그 중에서도 1.x와 2.x의 가장 큰 차이점은 1.x가 Hadoop의 HDFS 파일 시스템을 기반으로하는 반면 2.x는 데이터 스토리지 계층을 추상화하고 HBase 및 MySQL과 같은 데이터베이스에 데이터를 저장할 수 있다는 것입니다. 또 다른 중요한 것은 Nutch가 1.2와 그 이전에 완전한 검색 엔진으로 출시되었다는 것입니다. 1.3 이후 Nutch 자체는 주로 크롤링 기능 만 있습니다. 크롤링 된 데이터를 색인하고 검색 해야하는 경우 Solr Full-Text 검색 서버를 사용해야합니다. Nutch와 Solr은 모두 Lucene을 기반으로 개발되므로 Nutch가 기어 다니는 데이터는 Solr에서 쉽게 색인 될 수 있습니다. Nutch 공식 웹 사이트는 컴파일 된 1.x 패키지를 다운로드 할 수 있지만 2.x는 소스 코드 만 제공하며 직접 컴파일해야합니다. Nutch는 개미를 사용하여 제작되었습니다. 직접 컴파일하면 소스 코드를 컴파일하려면 Ant를 설치해야합니다. Nutch 버전을 선택하는 방법과 관련하여 주로 다음과 같은 문제를 고려합니다. 적은 수의 웹 사이트 만 크롤링하고 색인 해야하는 경우 1.x 및 2.x를 사용할 수 있으며 분산되지 않고도 독립형을 사용할 수도 있습니다. 그러나 많은 웹 사이트를 크롤링하거나 전체 웹을 크롤링하려면 1.x가 빅 데이터 처리를 위해 특별히 생성 된 Hadoop 파일 시스템을 기반으로하기 때문에 1.x를 선택하고 분산을 사용하는 것이 가장 좋습니다. 많은 웹 사이트를 크롤링 할 때 2.x를 사용하는 경우 몇 가지 성능 문제가 발생할 수 있습니다. MySQL을 사용하여 데이터를 저장하는 경우 웹 페이지 데이터가 수십억을 초과하면 성능이 악몽이됩니다. Nutch1.x의 다른 버전도 많이 바뀌었고 명령의 실행은 큰 변화를 겪었습니다. 따라서 초보자는이 자습서의 해당 버전 1.10을 다운로드하는 것이 좋습니다. Nutch 사용에 익숙해지면 이러한 변경 사항은 귀하에게 큰 영향을 미치지 않습니다. Nutch는 오늘날 가장 인기있는 오픈 소스 크롤러 중 하나이며 기업에서 널리 사용되었습니다. Nutch의 플러그인 메커니즘을 통해 개발자는 웹 크롤링 전략을 유연하게 사용자 정의 할 수 있습니다. Nutch는 오랜 역사를 가지고 있으며 오늘날 유명한 Hadoop은 Nutch에서 개발되었습니다. Nutch는 독립형 모드뿐만 아니라 분산 모드에서도 실행될 수 있습니다. Nutch는 Linux 환경에서만 작업하는 것을 지원하므로 Linux와 같은 OS X에서 직접 사용할 수 있습니다.
버전 선택 : 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 홈 디렉토리의 다음 명령을 사용하여 소스 코드를 컴파일합니다.
실행하려면 Nutch 홈 디렉토리로 전환하십시오.
ant
더 많은 의존성 패키지를 다운로드해야하기 때문에 첫 번째 컴파일 프로세스에는 많은 시간이 걸립니다. 특정 시간은 실제 네트워크 상황에 따라 다릅니다. 빠른 경우 5-10 분이 걸리고 느리면 20 분 이상이 걸립니다.
편집 시작시 다음 경고가보고됩니다.
자원 org/sonar/antlib.xml에서 정의를로드 할 수 없습니다. 찾을 수 없었습니다.
이 경고는 컴파일 결과에 영향을 미치지 않으며 무시할 수 있습니다.
컴파일 프로세스 중에도 네트워크 문제가있을 수 있습니다. 마지막 컴파일 결과를 지우려면 다음 명령 만 사용하면됩니다 (이미 다운로드 된 종속성 패키지는 삭제되지 않습니다).
ant clean
네트워크가 열악한 경우, 위의 두 단계는 여러 번 반복 될 수 있습니다.
비슷한 정보가 나타나면 컴파일이 성공했음을 의미합니다.
성공을 거두십시오
총 시간 : 1 분 7 초
아래 그림과 같이 :
Nutch가 성공적으로 컴파일되면 홈 디렉토리에서 런타임 폴더가 생성됩니다. 여기에는 두 개의 하위 폴더가 배포되고 로컬이 포함되어 있습니다. 배포는 분산 크롤링에 사용되며 로컬은 로컬 독립형 크롤링에 사용됩니다. 이 섹션에서는 먼저 로컬 독립형 크롤링의 사용에 대해 설명하고 분산 크롤링은 후속 자습서에 배치됩니다.
로컬 폴더를 입력 한 다음 빈 폴더를 입력하십시오. 두 개의 스크립트 파일이 있으며, 하나는 Nutch이고 다른 하나는 크롤링입니다. 그중에서도 Nutch에는 필요한 모든 명령이 포함되어 있으며 크롤링은 주로 원 스톱 크롤링에 사용됩니다.
아래 그림과 같이 :
unzip solr-4.10.4.zip
Solr-4.10.4 폴더를 가져 와서 런타임/로컬/conf/schema-solr4.xml을 Nutch 디렉토리의 example/solr/collection1/conf에서 solr의 구성 파일 디렉토리에 복사하십시오.
cp apache-nutch-1.10/runtime/local/conf/schema-solr4.xml solr-4.10.4/example/solr/collection1/conf
Solr의 원래 schema.xml 파일을 삭제하십시오.
rm –f solr-4.10.4/example/solr/collection1/conf/schema.xml
Schema-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의 Control 인터페이스를 볼 수 있습니다.
http : // localhost : 8983/solr
Nutch Bin 디렉토리가 아닌 Nutch Home 디렉토리에서 실행하는 대부분의 명령은 Nutch 홈 디렉토리를 입력하십시오. 이는 일부 복잡한 명령을보다 편리하게 실행할 수 있기 때문입니다. 원 스톱 크롤링 명령을 확인하십시오.
bin/crawl
bin/nutch
위의 두 명령을 입력하면 각각의 사용 방법이 표시됩니다. 일반적으로 사용되는 몇 가지 명령은 아래 그림과 같이 나중에 자세히 설명됩니다.
크롤링 사용 방법을 확인하십시오.
-i | index는 Nutch에게 구성된 인덱서에 크롤링 된 결과를 추가하도록 지시하는 데 사용됩니다.
-D는 Nutch Call에 전달 된 매개 변수를 구성하는 데 사용됩니다. 여기에서 인덱서를 구성 할 수 있습니다.
시드 디러드 파일 디렉토리, 시드 URL을 저장하는 데 사용됩니다. 즉, 크롤러가 처음에는 크롤링하는 URL입니다.
데이터 크롤링을위한 DIR 저장 경로를 크롤링합니다.
Num Rounds 루프 크롤링.
사용의 예 :
Nutch의 런타임/로컬 디렉토리를 입력하고 새 URLS 폴더를 만듭니다.
URLS 폴더에 URL을 저장하는 새 종자 파일 만들기 Seed.txt
URLS/SEED.TXT : http://www.163.com에 초기 크롤링 URL을 추가하십시오
Solr 서비스를 켜십시오. 그렇지 않으면 인덱스는 정상적으로 Solr로 설정할 수 없습니다.
bin/crawl -i -D solr.server.url=http://localhost:8983/solr/ urls/ TestCrawl/ 2
이 명령에서 -crawler에게 주어진 색인에 크롤러를 추가하도록 지시합니다. Solr.server.url = http : // localhost : 8983/solr/Solr Indexer의 주소, URL/는 시드 URL 파일 경로이며 TestCrawl은 Crawler 데이터 (URL, 크롤링 콘텐츠 등)를 저장하기 위해 Nutch가 사용하는 폴더입니다. 파라미터 2는 여기에서 루프가 두 번 크롤링하는 것을 의미합니다.
위 명령을 실행하면 웹 페이지를 크롤링 할 수 있습니다. 브라우저에 http : // : 8983/solr을 입력하고 Collection1을 선택하면 키워드를 통해 인덱스 된 콘텐츠를 검색 할 수 있습니다. 크롤러가 지정된 URL의 모든 페이지를 크롤링하지 않았다는 점에 유의해야합니다. 크롤링 상황을 보는 특정 방법은 아래 분산 크롤링을 참조하십시오.
크롤링이 성공한 후 다음 그림은 다음 그림에 표시됩니다.
때로는 원 스톱 크롤링이 우리의 요구를 잘 충족시킬 수 없습니다. 따라서 여기서는 분산 크롤링 방법을 소개합니다. 분산 크롤링의 실제 크롤링 프로세스에는 여러 명령이 포함되어 있습니다. Crawl은 작업을 단순화하기 위해 여러 명령을 결합하여 사용자에게 제공합니다. Nutch 크롤러 기술을 깊이 배우고 싶다면 크롤링 명령을 사용하는 것만으로는 충분하지 않습니다. 크롤링 과정에 매우 익숙해야합니다. 여기에서는 이전 자습서에서 Seed.txt에 저장된 URL 정보를 사용해야합니다. 또한 데이터를 단계적으로 재판매해야하므로 Data/CrawlDB, Data/LinkDB 및 Data/Segments 폴더에서 내용을 삭제해야합니다.
크롤링 명령을 실행 한 후 TestCrawl 폴더는 Runtime/Local of Nutch에서 생성됩니다. 여기에는 CrawlDB, LinkDB 및 세그먼트의 3 개의 폴더가 포함됩니다.
CRAWLDB : URL이 크롤링되었는지 여부와 크롤링시기에 대한 정보가 포함 된 Nutch에서 발견 한 모든 URL이 포함되어 있습니다.
LinkDB : Nutch가 발견 한 CrawlDB의 URL에 해당하는 모든 링크와 소스 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
Generate 명령이 실행되면 크롤링 할 페이지 목록이 생성되고 크롤링 목록은 새로 생성 된 세그먼트 경로에 저장됩니다. 세그먼트 폴더는 생성 된 시간에 따라 명명되었습니다 (이 자습서의 폴더 이름은 201507151245입니다).
Generate를위한 많은 선택적 매개 변수가 있으며, 독자는 다음 명령을 통해 스스로 볼 수 있습니다 (다른 명령에 대해서는 동일합니다).
bin/nutch generate
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을 찾습니다. 상태 _DB_DUPLIP으로 표시된 중복 URL의 경우 청소 및 인덱싱 작업이 태그에 따라 삭제됩니다.
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 정보를 저장하는 데이터베이스입니다. -스테이트는 통계 상태 정보를 보는 것을 의미합니다. -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 수를 나타내고, 재 시도는 재 시도 시간 수를 나타내고, 최소 점수는 가장 낮은 점수, 최대 점수는 가장 높은 점수, 상태 1 (db_unfetched)은 크롤링되지 않은 숫자이며, 상태 2 (db_fetched)는 크롤링 된 숫자입니다.
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 매개 변수는 데이터 내보내기 명령과 동일합니다.
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이 기록됩니다.
readseg는 세그먼트에서 데이터를 보거나 내보내는 데 사용됩니다.
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
내보낸 데이터 정보를 보려면 데이터를 segment_dump 폴더로 가져 오십시오.
cat segment_dump /*
매우 구체적인 웹 페이지 정보가 포함되어 있음을 알 수 있습니다.
WAMP/MAMP 또는 PHPSTORM 및 내장 서버를 사용할 수 있습니다.
특정 작업은 다음을 참조하십시오 : 포털
터미널을 열고 프로젝트 경로로 전환하십시오.
composer require silex/silex twig/twig thiagoalessio/tesseract_ocr:dev-master PHP의 미니 프레임 워크 Silex Framework 사용하기 때문에 그림과 같이 PHP 소스 엔지니어링 프로젝트 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) 사용자가 컨텐츠를 확인한 후 검색을 클릭하여 검색 엔진 모듈을 입력하여 검색 결과를 얻을 수 있습니다.
Visual Design은 제품 구성에서 매우 중요한 구성 요소를 차지하는데, 이는 제품에 대한 초기 인상, 사용 중 경험 및 최종 인상 등에 직접적인 영향을 미칩니다. 대부분의 경우 제품의 성공 또는 실패는 종종 성공적인 시각적 설계 경험에 달려 있습니다. 이 디자인을 위해, 나는 그것을 물건을 처리 할 수있는 시스템으로 간주하지 않고 신중하게 만든 제품으로 간주했습니다. 따라서이 시스템의 프론트 엔드 비주얼 설계 및 사용자 경험에 큰 관심을 기울입니다. 전체 사이트에서 색상을 선택하기 위해 대중, 빨간색 및 파란색으로 인식되는 Baidu 검색 엔진 테마 색상을 선택했습니다. 홈페이지 배경은 빨간색과 파란색 전환 색상을 사용하고 투명성을 조정합니다. CSS 코드를 통해 그려져 로딩 시간을 절약하고 사용자에게 시각적 영향을 미칩니다. 동시에, 홈페이지의 텍스트 설명이 바닥 그림자에 추가되었으며 Microsoft Thin Black Fonts를 사용하여 시각적 느낌을 더욱 층을 이루게합니다. 이미지 검색 상자와 미리보기 상자는 그림자를 증가 시키며 미리보기 필드의 중요성에 따라 다른 색상과 색도 차이가 이루어집니다. 사용자가 시각적으로 새로 고침하고 간결하게 만들고 가능한 빨리 필요한 정보를 찾을 수 있습니다. 그런 다음 간단한 로딩 페이지를 통과합니다. 여기서 대기 원은 확대 및 출력으로 이루어 지므로 사용자가 대기 시간에 짜증을 느끼지 않도록합니다. 동시에 시스템 배경이 계산을 수행하고 실행중인 것으로 사용자에게 알려줍니다. 인식 결과 페이지로 점프 할 때는 사본의 중요성에 따라 모든 텍스트 색상과 글꼴 크기가 여전히 시각적으로 조정되어 사용자가 중요한 정보를 필터링하는 데 너무 많은 시간을 소비 할 필요가 없습니다. 두 버튼의 스케줄링 및 색상 선택은 클릭 욕구와 클릭 감각을 증가시키는 경향이있어 사용자가 다음 작업을 수행하도록 촉구합니다. 최종 검색 결과 페이지의 경우 책과 비슷한 장으로 설계했습니다. 각 목록에는 검색 결과 웹 페이지 제목, 웹 페이지 요약, 포함 시간, 무게, 시각적 영향 및 인식을 높이기 위해 스케줄링 및 글꼴 크기 색상 조정이 다릅니다. 그것은 사용자가 대량 검색 엔진에 공통점이 있다고 느끼게하지만, 자신의 성격을 밝히고, 사용자에게 친숙하고 새로운 경험을 제공하며, 새로 고침 및 광고가없고 불필요한 간섭 정보의 특성을 유지합니다. 또한 모든 시각적 디자인은 현재 반응 형 디자인 개념을 결합하고 PC와 모바일 모두에서 우수한 사용자 경험과 시각적 효과를 갖습니다.
** 나뭇 가지를 사용한 템플릿 쓰기 : **
프론트 엔드 경험은 아래 그림에 나와 있습니다.
주로 Bootstrap 3.4를 기반으로하며 XDK/PhoneGap과 함께 포장되어 해당 NA 앱으로 컴파일되어 응용 프로그램 시장에 게시 할 수 있습니다. 모바일 경험은 아래 그림에 나와 있습니다.
4 년간의 대학에서 나를 도와 준 모든 교사와 모든 급우들에게 감사합니다. 그들은 나에게 전문적인 지식을 가르쳐주었습니다. 지난 4 년간의 연구와 과학적 연구를 통해, 나의 지식 구조와 과학적 연구 능력이 새로운 차원에 도달했을뿐만 아니라, 더 중요한 것은 사회에 통합되어 완전한 인턴쉽 경험을 제공하여 대학원생들이 저의 학사 학위에서 경험할 수없는 많은 인터넷 회사의 업무 경험을 경험할 수있게 해주었습니다. 눈이 깜박이면서 4 년간의 대학이 끝나고 있습니다. 긴장된 분위기 로이 졸업 논문을 마쳤을 때, 나는 무지한 아이에서 성숙한 젊은이로 바뀌 었습니다. 똑같은 것 - 땀 만 당신을 속이지 않습니다. 마지막으로, 전자 과학 기술 대학교에 감사드립니다. 대학에서 만난 모든 분들께, 4 년 동안 노력해 주셔서 감사합니다.
https://github.com/daijiale/ocroc_fontssearchengine.
http://v.youku.com/v_show/id_xmtyzndy2ndyxng=.html.