Instalar o REMBRANDT
Esta é a sequência recomendada de acções para instalar o REMBRANDT. Por favor, leia atentamente cada instrução. Se souber o que esta´a fazer, pode saltar alguns passos, mas garanta que sabe o que está a fazer.
1. Requisitos
Veja o ficheiro DEPENDENCIES.txt, que tem uma lista de ficheiros jar que o REMBRANDT precisa. Estes ficheiros estão incluídos na directoria ${REMBRANDT_HOME}/lib.
Rembrandt é desenvolvido no MySQL server 5.1.32 a correr num Linux e num MacOS X, mas em princípio qualquer base de dados serve, desde que o conector próprio esteja configurado em saskia.wikipedia.db.driver e saskia.wikipedia.db.params.
O Rembrandt também precisa do Java VM 1.6.
1. Criação das bases de dados da Wikipédia
Nota: pode-se saltar este passo, se tiver a certeza do que está a fazer. Instalar as bases de dados da Wikipédia melhora consideravelmente o desempenho do REMBRANDT quando a DBpedia não consegue classificar entidades. No entanto, este passo requer bastante espaço em disco para instalar as bases de dados da Wikipédia, pode demorar algum tempo, e você tem de garantir que o MySQL está a funcionar no charset UTF-8, para minimizar os problemas de codificação de caracteres.vá a http://download.wikipedia.org/ e descarregue as bases de dados para a sua língua.
Os ficheiros necessários são:
- {lang}wiki-latest-category.sql.gz
- {lang}wiki-latest-categorylinks.sql.gz
- {lang}wiki-latest-page.sql.gz
- {lang}wiki-latest-redirect.sql.gz
- {lang}wiki-latest-pagelinks.sql.gz
Onde {lang} é o código de duas letras da língua que pretende. (Nota: 'latest' pode ser uma data, p.ex. '20080509').
Crie uma base de dados, ao entrar na consola do MySQL (escreva 'mysql') e use o comando:
mysql> CREATE DATABASE 'wikipedia';(Nota: se optar por outro nome, precisa de alterar as configurações do REMBRANDT).
Dê permissões de acesso para leitura ao utilizador 'wikipedia', com a senha 'saskia' (mais uma vez, estes parâmetros podem ser alterados), com o comando:
GRANT ALL PRIVILEGES ON wikipedia.* TO 'wikipedia'@'localhost' IDENTIFIED BY 'saskia';Agora, saia do MySQL e carregue os ficheiros da Wikipédia.
Uma sugestão para os carregar é:
(em Linux): zcat ptwiki-latest-category.sql.gz | mysql wikipedia -u wikipedia --password=saskia
(em Mac): gzcat ptwiki-latest-category.sql.gz | mysql wikipedia -u wikipedia --password=saskiaPor último, renomeie todas as tabelas de forma a ter um prefixo "{lang}_". Por exemplo:
mysql saskia -u saskia --password=saskia -e "rename table page to pt_page"ou, na consola do MySQL:
mysql> rename table page to pt_page;
3. Criar a Saskia DB
Crie uma base de dados, ao entrar na consola do MySQL (escreva 'mysql') e use o comando:
mysql> CREATE DATABASE 'saskia';
(Nota: se optar por outro nome, precisa de alterar as configurações do REMBRANDT).
Dê permissões de acesso para leitura ao utilizador 'saskia', com a senha 'saskia' (mais uma vez, estes parâmetros podem ser alterados), com o comando:
GRANT ALL PRIVILEGES ON saskia.* TO 'saskia'@'localhost' IDENTIFIED BY 'saskia';
Agora, saia do MySQL e carregue as tabelas da Saskia DB, com o seguinte comando:
mysql -u saskia saskia --password="saskia" < db/Saskia_create_db_6.1.sql
Agora, para criar o primeiro utilizador: edite o ficheiro db/Saskia_create_user.sql e substitua o login, primeiro e último nome, e email se desejar (o resto são informações para modo servidor, irrelevante por agora). Introduza o commando:
mysql -u saskia saskia --password="saskia" < db/Saskia_create_user.sql
A tabela 'user' tem os seguintes campos:
- usr_login - o Login
- usr_enabled - se o utilizador foi aceite e é válido, ou não.
- usr_groups - os grupos do utilizador (tal como no Unix), rodeados e separados por ';'
- usr_superuser - se o utilizador é um super-utilizador (tal como root em Unix)
- usr_firstname - O primeiro nome
- usr_lastname - O último nome
- usr_email - O email do utilizador
- usr_password - uma hash md5 da senha (só é preciso quando o serviço é usado via web)
- usr_tmp_password - uma hash md5 da senha temporária (só é preciso quando o serviço é usado via web)
- usr_api_key - uma chave API - 40 caracteres de [0-9a-f] (só é preciso quando o serviço é usado via web)
- usr_tmp_api_key uma chave temporária API - 40 caracteres de [0-9a-f] (só é preciso quando o serviço é usado via web)
- usr_pub_key - uma chave pública - 40 caracteres de [0-9a-f] (só é preciso quando o serviço é usado via web)
- usr_max_number_collections - número máximo de colecções que o utilizador pode criar.
- usr_max_number_tasks - número máximo de tarefas que o utilizador pode criar.
- usr_max_docs_per_collection - número máximo de documentos por colecção.
- usr_max_daily_api_calls - o número máximo de chamadas diárias pela API.
- usr_current_daily_api_calls - o número actual diário de chamadas API.
- usr_total_api_calls - o número total de chamadas API.
- usr_date_last_api_call - data da última chamada API, para fazer a recontagem diária.
De notar que há um campo, o usr_id, que é automaticamente preenchido com um número, que aumenta sequencialmente. Como tal, o primeiro utilizador terá o ID de 1.
Agora, para criar a primeira colecção: edite o ficheiro db/Saskia_create_collection.sql e substitua o nome da colecção, língua e descrição. Introduza o comando:
mysql -u saskia saskia --password="saskia" < db/Saskia_create_collection.sql
A tabela COLLECTION tem os seguintes campos:
- col_name - o nome da colecção
- col_owner - O ID do utilizador dono da colecção.
- col_lang - a língua da colecção.
- col_permission - permissões da colecção.
- col_comment - texto descritivo da colecção.
user, há um campo, o col_id, que é automaticamente preenchido com um número, que aumenta sequencialmente. Como tal, a colecção terá o ID 1. De notar que o parâmetro col_owner é obrigatório, ou seja, é preciso ter pelo menos um utilizador válido. Neste caso, a colecção pertence ao utilizador com ID 1.
As permissões funcionam de forma semelhante ao Unix: as três primeiras letras controlam as permissões para o próprio utilizador, as três letras seguintes as permissões para utilizadores que partilhem o mesmo grupo, e as últimas três letras controlam as permissões para todos os utilizadores em geral.
A letra 'r' define a permissão para ler, a etra 'w' define a permissão para escrever, e a letra 'a' define a permissão para administrar. Por outras palavras, uma entrada 'rwar--r--' quer dizer que os documentos da colecção estão acessíveis para ler para todos, mas só o próprio utilizador é que pode escrever / adicionar mais documentos, e só ele é que pode administrar a colecção.
Pode verificar se foi realizado om sucesso, ao escrever na consola do MySQL:
mysql> SELECT * from user; mysql> SELECT * from collection;
4. Instalar o WEBSTORE
O webstore é um gestor de documentos, que irá guardar os textos dos documentos-fonte e documentos anotados. O webstore pode ser descarregado em http://webstore.sourceforge.net/, mas também está incluído no pacote do REMBRANDT, em REMBRANDT_HOME/lib/webstore-dist.zip. O webstore é obrigatório, e importante para que o tamanho das colecções não prejudique o desempenho da DB naquilo que esta é importante, ou seja, na indexação e organização dos documentos.
Para instalar o Webstore, descompacte o ficheiro para uma directoria (/usr/local/webstore, /home/you/rembrandt/webstore, você escolhe), apenas garanta que a partição tem bastante espaço em disco e que a directoria tem as permissões necessárias, uma vez que o Webstore é um daemon que irá guardar e aceder a todos os documentos.
Seja qual for a sua directoria escolhida, vamos chamar de WEBSTORE_HOME. Adicione as seguintes variáveis de ambiente (certifique-se que elas serão sempre definidas, ao usar o ~/.bashrc ou o /etc/profile):
export WEBSTORE_HOME={WEBSTORE_HOME}
export WEBSTORE_CONFIG_FILE={WEBSTORE_CONFIG_FILE}
export WEBSTORE_DATA={WEBSTORE_DATA}
Onde:
- {WEBSTORE_HOME} - directoria onde os ficheiros do Webstore estão.
- {WEBSTORE_CONFIG_FILE} - O caminho até ao ficheiro conf file. Use REMBRANDT_HOME/conf/webstore-conf.xml.
- {WEBSTORE_DATA} - directoria onde os documentos serão guardados. Crie esta directoria, se necessário. Por exemplo, WEBSTORE_HOME/data
Agora adicione os executáveis Webstore ao PATH, por exemplo:
export PATH=$PATH:${WEBSTORE_HOME}/bin/linux
Agora vamos verificar se está a funcionar. Escreva 'webstore' na linha de comandos, deve ver o seguinte:
Usage: webstore option {args}*
options:
* -l,--launch-vol-server volume-id: launch a volume server.
* -k,--kill-vol-server volume-id: kill a volume server.
* -f,--count-files volume-id -> count the number of files in a volume.
* -c,--count-contents volume-id -> count the number of contents in a volume.
* -o,--count-overloads volume-id -> count the number of fileoverloads in a volume.
* -m,--make-volume volume-id -> create a volume (directory tree).
* -e,--erase-volume volume-id -> clear all the contents of a volume (not the directory tree).
* -s,--store volume-id content -> stores a content in a volume.
* -r,--retrieve key -> retrives a content.
* -d,--delete key -> deletes a content.
local volume servers up: (volume ids)
(none)
Não há volumes, há que os criar: um para os documentos fonte, outro para os documentos anotados. Para tal, escreva os comandos:
webstore -m sdoc webstore -m rdoc
Agora lance os volumes (importante: o webstore TEM de ter o webstore-conf.xml configurado com a variável de ambiente WEBSTORE_CONFIG_XML definida). Se escrever 'webstore', deverá ver:
local volume servers up: (volume ids) sdoc rdoc
em vez de:
local volume servers up: (volume ids) (none)
É muito importante que os volumes estejam a ser servidos nos portos 4444 e 4445. Se o sistema for reiniciado, eles precisam de ser novamente lançados. E verifique que, se o Webstore correr como utilizador normal, que os ficheiros de dados possuem as permissões certas.
5. Configuração do CLASSPATH
Decida uma directoria base para o REMBRABDT (por exemplo, /usr/local/rembrandt, /home/you/rembrandt), e garanta que mantém a mesma estrutura de directorias. Vamos assumir que escolheu REMBRANDT_HOME.
Garanta que os ficheiros jar no REMBRANDT_HOME/lib estão referidos no CLASSPATH. Garanta também que o rembrandt.jar, que está em REMBRANDT_HOME, também esteja no CLASSPATH (movendo-o, por exemplo, para a directoria REMBRANDT_HOME/lib). Recomendamos que adicione as seguintes linhas no "~/.bashrc" (só para si) ou "/etc/profile" (para todos):
export CLASSPATH=$CLASSPATH:`ls /home/you/rembrandt/lib/*.jar | tr "\n" ":"`O CLASSPATH é a variável de ambiente do Java que indica os sítios onde pode encontrar os pacotes jar necessários. Como tal, o REMBRANDT e os restantes pacotes jar precisam de estar numa directoria incluída no CLASSPATH.
6. Testar o REMBRADNT em modo simples
Ok, estamos prontos para ver se o REMBRANDT está a funcionar. Basta escrever:
echo "Rembrandt" | java rembrandt.bin.Rembrandt
E o resutado será:
<!-- Rembrandted by v.1.3 -->
<DOC DOCID="stdin-1" LANG="pt">
<TITLE>
</TITLE>
<BODY>
{<EM ID="0" S="0" T="0" C1="PESSOA" C2="INDIVIDUAL" DB="Rembrandt">[Rembrandt]</EM>}
</BODY>
</DOC>
Repare que, se vir um parâmetro 'DB', isso quer dizer que a DBpedia foi usada para anotar a EM.
Dicas:
- As codificações de caracteres podem estragar a anotação. Pode pré-definir as codificações ao configurar os parâmetros:
- rembrandt.input.encoding
- rembrandt.output.encoding
- rembrandt.err.encoding
-
Para ler um ficheiro, defina a variável
rembrandt.input.file; para escrever num ficheiro, defina a variávelrembrandt.output.file. Por omissão, o stdin e stdout são usados.
Por exemplo, o comando:
java -Drembrandt.input.file=file1.txt
-Drembrandt.output.file=file2.txt rembrandt.bin.Rembrandt
lê um ficheiro chamado file1.txt, anota-o e escreve o resultado no ficheiro file2.txt, usando as codificações dadas pela variável de ambiente Java file.encoding.
7. Testar o REMBRANDT em modo BD
7.1 Ler os documentos
Create a file with a sample text, for instance, "Rembrandt". Name it sample.txt, for example. First, you need to load that file into the SourceDocument table.
Make sure the webstores are up and running. On the REMBRANDT_HOME you can run the script:
./script/importX2Sdocs.sh
It will ask you to point out the document file, collection id or name, user id or name, document language and original id. You can check the source code for saskia.import.* files to check the several import procedures to store a document in MySQL (and in Webstore).
If the document was successfully imported, then in the Saskia DB you should see it (let's assume that the collection id is 1):
mysql> SELECT sdoc_id, sdoc_webstore from source_doc where sdoc_collection=1;
You should see a given Webstore key:
+---------+---------------------------+ | sdoc_id | sdoc_webstore | +---------+---------------------------+ | 1 | 6502065618501188246@sdoc% | +---------+--------------------+------+
To see the document, ask Webstore to show it, by passing the key:
webstore -r 6502065618501188246@sdoc%
You should see something like the document, formatted in REMBRANDT internal format:
<DOC DOCID="doc_20110303090933" LANG="pt">
<TITLE>
</TITLE>
<BODY>
{[Rembrandt]}
</BODY>
</DOC>
7.2 Tag documents
To invoke REMBRANDT on the document(s) you just stored, use the script:
./script/importS2Rdocs.sh
Give the user/collection, an amount of documents to parse, and it will
automatically search for untagged documents, tag them, and store them in the
doc table. Likewise, check them with:
mysql> select doc_id, doc_webstore from doc
+--------+---------------------------+
| doc_id | doc_webstore |
+--------+---------------------------+
| 1 | 3813646601739006368@rdoc% |
+--------+---------------------------+
and:
webstore -r 3813646601739006368@rdoc%
<DOC DOCID="doc_20110303090933" LANG="pt">
<TITLE>
</TITLE>
<BODY>
{<EM ID="0" S="0" T="0" C1="PESSOA" C2="INDIVIDUAL" DB="Rembrandt">[Rembrandt]</EM>}
</BODY>
</DOC>
7.2 Tag documents
To invoke REMBRANDT on the document(s) you just stored, use the script:
./script/importS2Rdocs.sh
Give the user/collection, an amount of documents to parse, and it will
automatically search for untagged documents, tag them, and store them in the
doc table. Likewise, check them with:
mysql> select doc_id, doc_webstore from doc
+--------+---------------------------+
| doc_id | doc_webstore |
+--------+---------------------------+
| 1 | 3813646601739006368@rdoc% |
+--------+---------------------------+
and:
webstore -r 3813646601739006368@rdoc%
<DOC DOCID="doc_20110303090933" LANG="pt">
<TITLE>
</TITLE>
<BODY>
{<EM ID="0" S="0" T="0" C1="PESSOA" C2="INDIVIDUAL" DB="Rembrandt">[Rembrandt]</EM>}
</BODY>
</DOC>
7.3 Analyse documents
You can populate other tables with NEs, entities and geoscopes, using the script:
./script/importR2Pdocs.sh