Este é um blog técnico relacionado à tecnologia OCR de reconhecimento de imagem, aprendizado de máquina e construção simples de mecanismos de pesquisa. É onde continuo registrando os resultados da pesquisa e as experiências todos os dias enquanto faz o projeto de graduação.
A tecnologia OCR (reconhecimento de caracteres ópticos) refere -se ao processo em que os dispositivos eletrônicos (como scanners ou câmeras digitais) verificam os caracteres impressos no papel, determinam suas formas detectando padrões escuros e brilhantes e depois traduz as formas em texto do computador usando métodos de reconhecimento de caracteres.
O mecanismo OCR da Tesseract foi desenvolvido pela HP Labs em 1985 e, em 1995, tornou -se um dos três mecanismos de identificação mais precisos da indústria de OCR. No entanto, a HP logo decidiu desistir de seus negócios de OCR, e o TESSERACT também foi mantido em vão. Vários anos depois, a HP percebeu que, em vez de colocar o Tesseract na prateleira, seria melhor contribuir com a indústria de software de código aberto e rejuvenescer - em 2005, o TESSERACT foi obtido pelo Instituto de Tecnologia da Informação de Nevada nos Estados Unidos e procurou melhorar, eliminar os insetos e otimizar o Tesseract do Google. O TESSERACT foi lançado como um projeto de código aberto no Google Project, e sua versão mais recente da versão 3.0 já suporta OCR chinês.
Em um histórico de tecnologia tão maduro, eu realmente quero usar essa tecnologia OCR e combiná -la com a atual tecnologia popular de desenvolvimento de desenvolvimento da Internet móvel e a tecnologia de recuperação de informações para realizar um mecanismo de pesquisa da Web móvel que pode identificar com sucesso os caracteres chineses na imagem, com o objetivo de obter as informações que você deseja das imagens com mais rapidez e precisão.
Com o rápido desenvolvimento da Internet e a chegada de big data, as pessoas dependem cada vez mais de dados e informações. No entanto, os dados da Internet de hoje são muito grandes e sempre houve grandes problemas com a precisão dos dados e a classificação razoável de dados. Em vista dessa situação, mais e mais pessoas esperam encontrar uma maneira mais conveniente de obter dados precisos no trabalho e na vida diários e encontrar a maneira de encontrar as informações que estão procurando com mais eficiência. Ao mesmo tempo, com a popularidade dos smartphones, mais e mais pessoas estão mais acostumadas a usar métodos extremamente eficientes, como tirar fotos para substituir os métodos anteriores de cópia e digitação para registrar dados que precisam ser registrados na vida e no trabalho. Inspirado por isso, quero usar a tecnologia mais madura de OCR (reconhecimento de caracteres ópticos) atualmente, bem como a atual tecnologia popular de desenvolvimento da Internet e tecnologia de recuperação de informações para realizar um mecanismo de pesquisa na web que pode reconhecer com sucesso as fontes de linguagem de imagem. O objetivo é pesquisar mais amigos de fotos com mais rapidez e precisão por meio de métodos convenientes, como tirar fotos e capturas de tela.
A arquitetura de back -end é dividida principalmente em três módulos principais: módulo OCR, módulo de mecanismo de pesquisa e módulo de middleware de mensagem 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.
```
em:
tesseract imagename outputbase [-l lang] [-psm pagesegmode] [configfile...] Indica tesseract 图片名输出文件名-l 字库文件-psm pagesegmode 配置文件.
Por exemplo: tesseract code.jpg result -l chi_sim -psm 7 nobatch
-l chi_sim significa usar a biblioteca de fontes chinesas simplificadas (você precisa baixar o arquivo de biblioteca de fontes chinês, descompactá -lo e armazená -lo no diretório tessdata . A extensão do arquivo de font é .raineddata simplificada Nome do arquivo da biblioteca de fontes chinesas: chi_sim.traineddata ).-psm 7 significa dizer ao tesseract code.jpg que a imagem é uma linha de texto. Este parâmetro pode reduzir a taxa de erro de reconhecimento. O padrão é 3 .** Teste de fonte inglesa: **
** Teste de fonte chinesa: **
Agora vamos construir a biblioteca de idiomas da fonte e o treinamento de dados de amostra de idiomas da font
**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).
Wiki oficial
Orientação chinesa
No Mac, use o Spotlight para ativar o terminal
vi /etc/profile
Neste momento, pressione a letra I no teclado para entrar no modo de edição e insira as duas linhas de comando a seguir abaixo do terminal:
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
Em seguida, pressione o ESC para terminar a edição e entre: WQ! Saída
source /etc/profile
java -version
Se as informações da versão Java aparecerão, prova que a instalação será bem -sucedida!
Introdução: Quando um projeto de código se torna grande, toda vez que é recompilado, embalado, testado etc. se torna muito complicado e repetitivo. Portanto, existem scripts no idioma C para ajudar a concluir essas tarefas em lotes. Os aplicativos em Java são independentes da plataforma e, é claro, eles não usarão scripts criados relacionados à plataforma para concluir essas tarefas em lote. O próprio Ant é um mecanismo de script de processo, usado para automatizar o programa de chamadas para concluir a compilação, embalagem, teste de projetos etc. Além de ser independente da plataforma com base no Java, o formato de script é baseado no XML, que é mais fácil de manter do que fazer scripts.
Seleção de versão: apache-ant-ANT-1.9.6-bin.zip
Endereço para download: Site oficial ANT
Inicie a instalação:
sudo sh
cd /usr/local/
chown YourUserName:staff apache-ant-1.9.6
ln -s apache-ant-1.9.6 ant
vi /etc/profile
Neste momento, pressione a letra I no teclado para entrar no modo de edição e insira as duas linhas de comando a seguir abaixo do terminal:
export ANT_HOME=/usr/local/ant
export PATH=${PATH}:${ANT_HOME}/bin
Em seguida, pressione o ESC para terminar a edição e entre: WQ! Saída
source /etc/profile
ant -version
Apache Ant (TM) Versão 1.9.6 Compilado Em aparece ... Esta tela prova que a instalação é bem -sucedida!
Introdução: Atualmente, o Nutch é dividido em duas grandes versões 1.x e 2.x. O Apache desenvolve e mantém independentemente essas duas grandes versões. Entre eles, a maior diferença entre 1.x e 2.x é que o 1.x é baseado no sistema de arquivos HDFS do Hadoop, enquanto o 2.x abstrai a camada de armazenamento de dados e pode salvar os dados em bancos de dados como HBase e MySQL. Outra coisa importante é que Nutch foi lançado como um mecanismo de pesquisa completo em 1.2 e antes. Desde 1.3, o próprio Nutch tem principalmente apenas funções de rastreamento. Se for necessário indexar e pesquisar os dados rastejados, também é necessário usar o servidor de pesquisa de texto completo do Solr. Como Nutch e Solr são desenvolvidos com base no Lucene, os dados rastejados por Nutch podem ser facilmente indexados no Solr. O site oficial da Nutch pode baixar o pacote 1.x compilado, mas o 2.x fornece apenas código -fonte e precisa ser compilado por você mesmo. Nutch é construído usando ANT. Se você mesmo compilar, precisará instalar a ANT para compilar o código -fonte. Em relação a como escolher a versão Nutch, consideramos principalmente os seguintes problemas: se você precisar rastejar apenas um pequeno número de sites e indexá-los, pode usar 1.x e 2.x e até usar independentes sem a necessidade de distribuídos. Mas se você deseja engatinhar um grande número de sites ou até rastejar a web inteira, é melhor escolher 1.x e usar distribuído, porque o 1.x é baseado no sistema de arquivos Hadoop, que foi criado especificamente para o processamento de big data. Se você usar 2.x ao rastejar um grande número de sites, poderá encontrar alguns problemas de desempenho. Se você usar o MySQL para armazenar dados, o desempenho será um pesadelo quando os dados da página da web excederem dezenas de bilhões. Diferentes versões do Nutch1.x também mudaram muito, e a execução de comandos passou por grandes mudanças. Portanto, recomenda -se que os iniciantes baixem a versão 1.10 correspondente deste tutorial. Quando você estiver familiarizado com o uso de Nutch, essas mudanças não terão muito impacto em você. Nutch é um dos rastreadores de código aberto mais popular hoje e tem sido amplamente utilizado pelas empresas. O mecanismo de plug-in da Nutch permite que os desenvolvedores personalizem as estratégias de rastreamento da web. Nutch tem uma longa história, e o famoso Hadoop hoje foi desenvolvido a partir de Nutch. Nutch não pode apenas executar no modo independente, mas também no modo distribuído. Nutch suporta apenas o trabalho em ambientes Linux, para que possa ser usado diretamente no OS X. do tipo Linux.
Seleção de versão: apache-nutch-1.10-src.zip
Download Endereço: Site oficial do Nutch
Inicie a instalação:
unzip apache-nutch-1.10-src.zip
cd apache-nutch-1.10
vi conf/nutch-default.xml
Encontre o atributo http.agent.name, copie-o para conf/nutch-site.xml e modifique o valor do valor para não estar vazio. Aqui está uma personalização como: HD Nutch Agent e, em seguida, continua a rastejar o comando relatará um erro. O nutch-site.xml modificado é o seguinte:
<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>
O atributo http.agent.name é usado para marcar rastreadores, para que o site rastejado possa identificá -los.
As propriedades configuradas no nutch-site.xml substituirão as propriedades padrão no nutch-default . Aqui, apenas modificamos o atributo http.agent.name , e nenhuma alteração será feita para os outros.
Nesse ponto, configuramos o Nutch e, em seguida, compilamos o código -fonte usando o seguinte comando no diretório inicial do Nutch.
Mude para o Diretório Home Nutch para executar:
ant
O primeiro processo de compilação levará muito tempo, porque mais pacotes de dependência precisam ser baixados. O tempo específico depende da situação real da rede. Demora de 5 a 10 minutos se for rápido e mais de 20 minutos, se for lento.
O aviso a seguir será relatado no início da compilação:
Não foi possível carregar definições de recursos org/sonar/formlib.xml. Não foi possível encontrar.
Esse aviso não afeta o resultado da compilação e pode ser ignorado.
Também pode haver um problema de rede durante o processo de compilação. Você só precisa usar o seguinte comando para limpar o último resultado da compilação (o pacote de dependência já baixado não será excluído):
ant clean
No caso de uma rede ruim, as duas etapas acima podem ser repetidas várias vezes.
Quando informações semelhantes aparecem, significa que a compilação é bem -sucedida:
Construir sucesso
Tempo total: 1 minuto 7 segundos
Como mostrado na figura abaixo:
Depois que o Nutch é compilado com sucesso, uma pasta de tempo de execução será gerada no diretório inicial. Ele contém duas subpastas implantadas e local. A implantação é usada para rastreamento distribuído, enquanto o local é usado para rastejamento local. Esta seção explica primeiro o uso de rastreamento independente local, e o rastreamento distribuído é colocado no tutorial subsequente.
Digite a pasta local e digite a pasta BIN. Existem dois arquivos de script, um é Nutch e o outro é rastreado. Entre eles, o Nutch contém todos os comandos necessários, e o rastreamento é usado principalmente para um rastreamento de um balcão.
Como mostrado na figura abaixo:
unzip solr-4.10.4.zip
Obtenha a pasta Solr-4.10.4, copie o Runtime/Local/conf/schema-solr4.xml no diretório Nutch para o diretório de arquivos de configuração do Solr em Exemplo/Solr/Collection1/Conf:
cp apache-nutch-1.10/runtime/local/conf/schema-solr4.xml solr-4.10.4/example/solr/collection1/conf
Exclua o arquivo schema.xml original do Solr:
rm –f solr-4.10.4/example/solr/collection1/conf/schema.xml
E comente o esquema-solr4.xml
<copyField source="latLon" dest="location"/>
Renomear schema-solr4.xml para schema.xml:
mv solr-4.10.4/example/solr/collection1/conf/ schema-solr4.xml solr-4.10.4/example/solr/collection1/conf/ schema.xml
Neste ponto, o Solr está configurado e insira o diretório Solr-4.10.4/Exemplo:
cd solr-4.10.4/example
Start Solr:
No momento, você pode acessar a porta 8983 através do navegador e visualizar a interface de controle do Solr:
http: // localhost: 8983/solr
Digite o diretório inicial do Nutch, a maioria dos comandos que executamos no diretório doméstico do Nutch, e não no diretório Nutch Bin, porque isso pode executar mais convenientemente alguns comandos complexos. Confira o comando de rastreamento único:
bin/crawl
bin/nutch
Digitar os dois comandos acima mostra seus respectivos métodos de uso. Alguns comandos comumente usados serão explicados em detalhes posteriormente, como mostrado na figura abaixo:
Verifique como usar o rastreamento:
-i | O índice é usado para dizer a Nutch para adicionar o resultado rastejado ao indexador configurado.
-D é usado para configurar os parâmetros passados para a chamada Nutch, podemos configurar o indexador aqui.
Diretório de arquivo de semente de semente de semente, usado para armazenar URL de semente, ou seja, o URL que o rastreador invoca inicialmente.
Rastreie o caminho de armazenamento dir para rastreamento de dados.
Num rodadas loop rastreiam.
Exemplo de uso:
Digite o diretório local/tempo de execução de Nutch e crie uma nova pasta URLS:
Crie um novo arquivo de semente que armazena URLs na pasta URLS, SEED.TXT
Adicione o URL de rastreamento inicial aos URLs/SEED.TXT: http://www.163.com
Ligue o serviço Solr, caso contrário, o índice não pode ser estabelecido normalmente no Solr
bin/crawl -i -D solr.server.url=http://localhost:8983/solr/ urls/ TestCrawl/ 2
Neste comando, -i diz ao rastreador para adicionar o rastreador ao índice fornecido. Solr.Server.url = http: // localhost: 8983/solr/é o endereço do indexador Solr, URLs/é o caminho do arquivo de URL de semente, e o teste de teste é a pasta usada pelo Nutch para armazenar dados de rastreadores (incluindo URL, conteúdo rastreado, etc.). O parâmetro 2 aqui significa loop rastejando duas vezes.
Ao executar o comando acima, você pode começar a rastejar a página da web. Digite http: //: 8983/solr no navegador, selecione Coleção1 e você pode pesquisar o conteúdo indexado por meio de palavras -chave. Deve -se notar aqui que o rastreador não rastejou todas as páginas do URL especificado. Para o método específico de visualizar a situação de rastreamento, consulte o rastreamento distribuído abaixo.
Depois que o rastreamento é bem -sucedido, a figura a seguir é mostrada na figura a seguir:
Às vezes, o rastreamento único não pode atender às nossas necessidades. Portanto, aqui vou introduzir o método de rastreamento distribuído: o processo de rastreamento real de rastreamento distribuído contém vários comandos. Para simplificar as operações, o Crawl combina vários comandos e os fornece aos usuários. Se você deseja aprender a tecnologia Nutch Crawler em profundidade, não basta usar o comando CRAWL. Você também precisa estar muito familiarizado com o processo de rastreamento. Aqui você precisa usar as informações de URL salvas em sementes.txt no tutorial anterior. Você também precisa excluir o conteúdo nas pastas Data/CrawldB, Data/LinkDB e dados/segmentos, porque precisamos recriar os dados nas etapas.
Após a execução do comando CRAWL, uma pasta TestCrawl será gerada em tempo de execução/local do Nutch, que contém três pastas: CRAWLDB, LinkDB e segmentos.
CRAWLDB: Ele contém todos os URLs encontrados por Nutch, que contém informações sobre se o URL estava rasteado e quando estava rasteado.
LinkDB: ele contém todos os links correspondentes ao URL no CRAWLDB, descobertos por Nutch, bem como o URL de origem e o texto da âncora.
Segmentos: ele contém várias pastas de segmento nomeadas após o tempo. Cada segmento é uma unidade de rastreamento, contendo uma série de URLs, e cada segmento contém as seguintes pastas:
crawl_generate:待抓取的URL
crawl_fetch:每个URL的抓取状态
content:从每个URL抓取到的原始内容
parse_text:从每个URL解析得到的文本
parse_data:从每个URL解析得到的外链和元数据
crawl_parse:包含外链URL,用来更新crawldb
bin/nutch inject data/crawldb urls
Para rastejar a página com o URL especificado, precisamos gerar uma lista de rastreamento do banco de dados (CRAWLDB):
bin/nutch generate data/crawldb data/segments
Após a execução do comando gerado, uma lista de páginas a serem rastreadas será gerada e a lista de rastreamento será armazenada em um caminho de segmento recém -criado. A pasta de segmento é nomeada de acordo com o momento em que foi criado (o nome da pasta deste tutorial é 201507151245).
Existem muitos parâmetros opcionais para gerar, os leitores podem vê -los por si mesmos através dos seguintes comandos (o mesmo é verdadeiro para outros comandos):
bin/nutch generate
Rastreie a página da web de acordo com a lista de rastreamento gerada por Generate:
bin/nutch fetch data/segments/201507151245 #这里的201507151245为文件夹名,需要根据自己的情况进行更改,或者直接采用data/segments文件夹,这样的操作对segments文件夹下的所有子文件夹生效,后文同理。
bin/nutch parse data/segments/201507151245
Atualize o banco de dados com base nos resultados rastejados:
bin/nutch updated data/crawldb –dir data/segments/201507151245
O banco de dados agora contém todos os pontos de entrada após a atualização da página inicial, bem como novos pontos de entrada para páginas recém -descobertas da coleção inicial.
Antes de criar um índice, primeiro invertemos todos os links para que possamos indexar o texto âncora de origem da página.
bin/nutch invertlinks data/linkdb –dir data/segments/201507151245
Inicie o serviço Solr e agora indexamos os recursos rastejados:
bin/nutch index data/crawldb -linkdb data/linkdb -params solr.server.url=http://localhost:8983/solr -dir data/segments/201507151245
Depois que o índice de texto completo é estabelecido, ele deve processar URLs duplicados para que o URL seja único:
bin/nutch dedup
Este comando procura URLs duplicados com base em assinaturas. Para URLs duplicados marcados como status_db_duplicate, as tarefas de limpeza e indexação as excluirão de acordo com a tag.
bin/nutch clean –D solr.server.url=http://192.168.1.11:8983/solr data/crawldb
Remova os documentos HTTP301, 404 e duplique do Solr.
Até agora, concluímos todas as etapas de rastreamento usando rastreamento passo a passo. Sob rastreamento normal, podemos pesquisar em http: // localhost: 8983/solr.
Usado para ler ou exportar o banco de dados de rastreamento de Nutch, geralmente usado para visualizar as informações de status do banco de dados e visualizar o uso do 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.
Aqui Crawldb é o banco de dados que salva informações de URL. -Stats significa visualizar informações de status estatístico, -Dump significa exportar informações estatísticas, URL significa visualizar informações do URL especificado e visualizar informações de status do banco de dados:
Os resultados estatísticos obtidos são os seguintes:
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
Os URLs totais representam o número total de URLs, a nova tentativa representa o número de tempos de repetição, a pontuação de mins é a pontuação mais baixa, a pontuação máxima é a pontuação mais alta, o status 1 (db_unfetched) é o número não rasteado e o status 2 (db_fetched) é rastreado.
O ReadLinkDB é usado para exportar todos os URLs e ancorar o texto, veja o uso:
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
Os parâmetros de despejo e URL aqui são os mesmos do comando readdb, exportando dados:
bin/nutch readlinkdb data/linkdb -dump linkdb_dump
Importe os dados para a pasta Linkdb_dump e visualize as informações de dados exportadas:
cat linkdb_dump /*
Você pode ver que as informações exportadas são semelhantes ao seguinte formato:
fromUrl: http://www.sanesee.com/article/step-by-step-nutch-introduction anchor: http://archive.apache.org/dist/nutch/
Ou seja, o URL de origem é registrado.
O ReadSEG é usado para visualizar ou exportar os dados no segmento e ver o uso:
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.
Dados do segmento de exportação:
bin/nutch readseg -dump data/segments/20150715124521 segment_dump
Importe os dados para a pasta segment_dump para visualizar as informações de dados exportadas:
cat segment_dump /*
Você pode ver que ele contém informações muito específicas da página da web.
Você pode usar o WAMP/MAMP, ou PHPSTOME e seu servidor embutido.
Para operações específicas, consulte: Portal
Abra o terminal e mude para o caminho do seu projeto:
composer require silex/silex twig/twig thiagoalessio/tesseract_ocr:dev-master Como usamos a Mini -Framework Silex Framework do PHP, precisamos estabelecer a estrutura do projeto de engenharia de origem PHP MVC (público, uploads, visualizações), como mostrado na figura:
<?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 );** Processo de interação: **
1) Os usuários digitam o URL do site da página inicial, entram na página inicial, aproveitam o serviço e aprendam sobre os detalhes do serviço.
2) O usuário carrega as imagens de pesquisa necessárias através da caixa de pesquisa e visualizações antes do upload.
3) Depois que o usuário confirmar que a imagem carregada está correta, clique no botão Pesquisa de imagem para fazer upload e identificar a imagem. Como essa parte do servidor possui uma grande quantidade de cálculo, leva de 2 a 5 segundos para retornar o resultado, para que o usuário seja apresentado com uma página de carregamento.
4) O reconhecimento de imagem é concluído, a página de carregamento desaparece e a página de confirmação de visualização do resultado do reconhecimento é inserida.
5) Depois que o usuário confirmar o conteúdo, ele pode clicar em Pesquisar para inserir o módulo do mecanismo de pesquisa para obter os resultados da pesquisa.
O design visual ocupa um componente extremamente importante na composição do produto, que afeta diretamente a impressão inicial do usuário do produto, a experiência durante o uso e a impressão final restante, etc. Mesmo em muitos casos, o sucesso ou falha de um produto geralmente depende da experiência de design visual bem -sucedida. Para esse design, não o considerei um sistema que pode lidar com as coisas, mas como um produto que criei cuidadosamente. Portanto, presto muita atenção ao design visual do front-end e à experiência do usuário deste sistema. Para selecionar cores em todo o site, escolhi as cores do tema do mecanismo de pesquisa do Baidu que são mais reconhecidas pelo público, vermelho e azul. O plano de fundo da página inicial usa cores de transição vermelha e azul e ajusta a transparência. Ele é desenhado através do código CSS, que economiza tempo de carregamento e oferece aos usuários um bom impacto visual. Ao mesmo tempo, a descrição do texto da página inicial foi adicionada à sombra inferior e usa fontes pretas finas do Microsoft para tornar o visual mais em camadas. A caixa de pesquisa de imagens e a caixa de visualização também aumentam a sombra, e diferentes cores e distinção de cromaticidade são feitas para a importância do campo de visualização. Isso torna o usuário visualmente revigorante e conciso e pode encontrar as informações necessárias o mais rápido possível. Em seguida, ele passará por uma página de carregamento simples. Aqui, um círculo de espera é feito para aumentar e diminuir o zoom, para que o usuário não se sinta irritado com o tempo de espera. Ao mesmo tempo, diz ao usuário que o plano de fundo do sistema está executando cálculos e em execução. Ao pular para a página de resultado do reconhecimento, todas as cores de texto e tamanhos de fonte ainda são ajustadas visualmente de acordo com a importância da cópia, para que o usuário não precise gastar muito tempo filtrando informações importantes. O agendamento e a seleção de cores dos dois botões também tendem a aumentar o desejo e a sensação de clicar, levando o usuário a executar a próxima operação. Para a página de resultados finais de pesquisa, eu a projetei em um capítulo semelhante a um livro. Cada lista possui diferentes ajustes de agendamento e tamanho de fonte com base no título da página da Web de resultados de pesquisa, resumo da página da web, tempo de inclusão, peso, para aumentar o impacto e o reconhecimento visual. Isso faz com que os usuários sintam que eles têm alguns pontos em comum com os mecanismos de busca em massa, mas revelam algumas de suas próprias personalidades, oferecendo aos usuários uma experiência familiar e nova e também mantém as características de informações de interferência refrescantes e sem anúncios e sem anúncios. Além disso, todos os designs visuais combinam o conceito atual de design responsivo e têm boa experiência do usuário e efeitos visuais no PC e no celular.
** Escrita de modelo usando o galho: **
A experiência do front-end é mostrada na figura abaixo:
É baseado principalmente no Bootstrap 3.4 e pode ser embalado com XDK/PhoneGap e compilado no aplicativo NA correspondente e publicado no mercado de aplicativos. A experiência móvel é mostrada na figura abaixo:
Obrigado a todos os professores e a todos os colegas de classe que me ajudaram nos quatro anos da faculdade. Eles me ensinaram conhecimento profissional. Nos últimos quatro anos de estudo e pesquisa científica, não apenas minha estrutura de conhecimento e a capacidade de pesquisa científica atingiram um novo nível, mas, mais importante, ela se integrou à sociedade e me deu experiência completa de estágio, permitindo -me experimentar muitas experiências de trabalho da empresa de internet que os estudantes de pós -graduação não podem experimentar em minha graduação. Em um piscar de olhos, quatro anos de faculdade estão chegando ao fim. Quando completei essa tese de graduação com um humor nervoso, também mudei de uma criança ignorante para um jovem maduro. A mesma coisa - apenas o suor não o enganará. Finalmente, agradeça à Universidade de Ciência e Tecnologia Eletrônica, todos que conheci na Universidade e agradeço a mim mesma por meus quatro anos de trabalho duro.
https://github.com/daijiale/ocr_fontSearchEngine.
http://v.youku.com/v_show/id_xmtyzndy2ndyxng==.html.