Commit 4b0dd20d authored by Krista Liin's avatar Krista Liin
Browse files

Esimene lähtestus

parents
.project
.pydevproject
.idea/
*.iml
# DOCKERi skript
FROM continuumio/anaconda3:2019.03
#FROM debian:buster
# Kui Debianil pole vaikimisi kaasas GCC vajalikke teeke vms, siis tuleb need ka lasta installida.
#lisatud java, eemaldatud python (olemas)
RUN apt-get update && \
apt-get -y install curl sudo gnupg apt-utils && \
curl -sL https://deb.nodesource.com/setup_10.x | sudo bash - && \
apt-get -y install build-essential nodejs wget && \
apt-get -y install g++ swig && \
apt-get -y install git && \
mkdir /usr/java && cd /usr/java && \
curl -sL https://javadl.oracle.com/webapps/download/AutoDL?BundleId=238719_478a62b7d4e34b78b671c754eaaf38ab && \
mv * java.tar.gz && tar zxvf java.tar.gz && \
export PATH="/usr/java/jre1.8.0_211/bin:$PATH" && \
echo "Installed NODE.JS and PYTHON 3 and JAVA"
RUN npm install -g forever
# Valmistame ette koodi, mida me DOCKERis kasutama hakkame. Siinkohal peaks plaanima, et mis failid kus kataloogis peaks olema
RUN git clone 'https://gitlab.keeleressursid.ee/keeleliin/keeleliin-wrapper.git' --single-branch wrapper && \
mkdir -p /config && mkdir -p /wrapper/files && mkdir -p /wrapper/tmp && mkdir -p /wrapper/logs && \
cd wrapper && npm install && \
chmod +x *.sh && \
echo "NPM is installed"
# Määratleme aktiivse töökataloogi
WORKDIR /wrapper
# SIIA ALLA lisa kõik installeerimise käsud, mis on vajalikud sisulist tööd tegeva tarkvara X paigaldamiseks.
# Tarkvara X paigaldamine algab
COPY config_dist.js /wrapper/config.js
COPY *.py /wrapper
# lemmatiseerija.py jaoks on vajalik estnltk teek, võtame selle miniconda abiga
#RUN wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh && \
# bash Miniconda3-latest-Linux-x86_64.sh -b -p $HOME/miniconda && \
# export PATH="$HOME/miniconda/bin:$PATH" && \
# echo "Miniconda installed" && \
RUN conda install -c estnltk -c conda-forge estnltk && \
echo "ESTNLTK installed"
# Tarkvara X paigaldamine lõppeb
# Expose port
EXPOSE 3015
VOLUME ["/config"]
VOLUME ["/wrapper/logs"]
VOLUME ["/wrapper/files"]
VOLUME ["/wrapper/tmp"]
CMD /wrapper/docker_start.sh
# Teenus KL-Lemmatiseerija
Käesolev teenus kasutab teeki ESTNLTK ja tagastab etteantava tekstifaili kohta
faili, milles teksti iga sõna on asendatud tema lemmaga. Lemmad on tühikutega eraldatud.
## Komponendi docker-compose'ga kasutamise ettevalmistamine (Linuxis)
* Eeldame, et serveris on juba olemas järgmised projektid:
* https://gitlab.keeleressursid.ee/keeleliin/keeleliin-master.git
* https://gitlab.keeleressursid.ee/keeleliin/server.git
* https://gitlab.keeleressursid.ee/keeleliin/klient.git
* Tee käesolevast projektist enda serveri kettale kloon:
```
$ git clone https://gitlab.keeleressursid.ee/keeleliin/kl-wc.git
```
* Tutvu saadaoleva dokumentatsiooniga ja kui vaja, siis tee projekti failidesse vajalikud muudatused. Tavaliselt on vaja muuta faile
* config_dist.js
* Dockerfile
* Salvesta tehtud muudatused
```
$ git commit -a
```
* Täienda konfiguratsioonifaili keeleliin-master/docker-compose.yml vastavalt failis keeleliin-master/README.MD kirjapandud juhistele.
Näiteks antud teenuse nimeks konfiguratsioonis on wordcount.
Jälgi, et config.js-is kirjeldatud teenuse port, Dockerfile #Expose port ja docker-compose.yml'is olev service.wordcount.port oleksid sama väärtusega.
* Valmista ette teenuse konteineri image:
```
$ cd keeleliin-master
$ docker-compose build wordcount
```
* Kui keeleliini rakendus juba töötab, siis käivita uue teenuse konteiner nii:
```
$ docker-compose up -d wordcount
```
* Kui keeleliini rakendus veel ei tööta, siis kogu rakendust korraga käivitakse nii:
```
$ docker-compose up -d
```
* Uue teenuse funktsioneerimist saab kontrollida, kui pöörduda veebilehitsejaga serveri teenusele määratud pordi poole. Kui serveri nimeks on 'kl-host' ja
teenuse pordiks näiteks 3006, siis peaks näha olema infot järgmistel lehtedel:
* http://kl-host:3006/
* http://kl-host:3006/api/v1/check
* http://kl-host:3006/api/v1/statistics
* http://kl-host:3006/api/v1/service/install
* Soovi korral saab teenuse konteineris teha toiminguid, aga eeldatavasti ei ole vaja midagi täiendavat teha:
```
$ docker-compose exec wordcount bash
```
* Keeleliini üksiku teenuse (või kogu rakenduse) saab seisma panna nii:
```
$ docker-compose down wordcount
$ docker-compose down
```
var config = require('./global_config/global');
/*
* Teenuse komponendi ja serveri urlid ilma pordita.
* Kasutatakse teenuse serverisse installeerimisel teenuse urli moodustamiseks: <config.serviceUrl>:<config.wrapper.port>/api/v1/
*/
config.serviceUrl = 'http://lemmatiseerija16';
config.serverUrl = 'http://server';
/*
* Redis serveri andmed. Kui kasutatakse vaikeseadeid, siis pole vaja muuta
*/
config.redis = {
host: 'redis',
port: 6379
};
/*
* Nimekiri keeleliini serverirakendustest, kuhu teenuse käivitamisel see installeeritakse.
*/
config.integration = [
{
installUrl: 'http://server:3000/api/v1/service/install',
apiKey: 'server-wrapper-api-key'
}
];
/*
* Teenuse failide salvestamise asukohad
*/
config.fs = {
storagePath: '/wrapper/files',
tmpPath: '/wrapper/tmp'
};
/*
* Kui teenuse töös peaks tekkima vigu ja selle kohta soovitakse veadeadet emailile saada,
* siis tuleks see sisse kommenteerida ja *** väjad täita
*/
/* config.log4js.appenders.push({
"type": "logLevelFilter",
"level": "ERROR",
"appender": {
"type": "smtp",
"layout": {
type: 'pattern',
pattern: "[%d] [%x{port}-%x{pid}][%5.5p] %c - %m",
tokens: {
pid: process.pid,
port: config.port
}
},
"recipients": "***@***.***", //komaga eraldatult eposti aadressid
"sendInterval": 10, //sec
"transport": "SMTP",
"SMTP": {
"host": "smtp.gmail.com",
"secureConnection": false,
"port": 587,
"auth": {
"user": "***",
"pass": "***"
},
"debug": true
}
}
}
);
*/
config.wrapper = { //teenuse seadistus
id: 'lemmatiseerija16', // Unikaalne lühinimi
title: 'Teksti lemmatiseerija', //Avalik nimi
description: 'Teisendab sisendiks saadud teksti, asendades iga sõna tema lemmaga, tühikutega eraldatult. Põhineb EstNLTK teegil (v1.6).', //Kirjeldus
port: 3015, //port
class: 'inputOutputLocalCommand', //wrapperi failinimi wrapper kaustast, mida utiliidi käivitamiseks kasutatakse
command: { commandTemplate: 'python lemmatiseerija.py [data]' }, // utiliidi käsurea käsk
requestConf: { //Päringu seadistus
requestBodyParamsMappings: { //Päringu post parameetrid
isAsync: { //parameeter isAsync
type: config.paramTypes.SELECT, //Tüüp. Võimalikud väärtused: config.paramTypes.SELECT ja config.paramTypes.TEXT
options: ['0', '1'], //Võimalikud sobivad väärtused
value: '1', //Soovituslik vaikeväärtus
filter: function (value) { //parameerile rakendatav filter. Antud juhul viiaks väärtus boolean kujule
return value == 1;
},
required: true, //kas mittetühi väärtus on nõutud
allowEmpty: false, //kas parameeter peab olema saadetud
validator: function (value, request) { //filtreeritud väärtuse valideerimine
if( typeof value != 'boolean' ){
request.setMessage('isAsync', 'Peab olema boolean');
return false;
}
return true;
}
}
},
requestFiles: { //Päringuga saadetavad failid
content: { //Faili võti
type: 'text', //Ressursi tüübi võti
sizeLimit: 0, //Suuruse piirang
sizeUnit: 'byte',//Suuruse piirangu ühik
isList: false //Kas tegemist võib olla ka failide listuga
}
}
},
outputTypes: [ //teenuse väljundressursside kirjeldused
{
type: 'lem_a', //ressursi tüüp
key: 'output' //väljundressursi võti
}
],
sessionMaxLifetime: 600 // sessiooni maksimaalne kestvus
};
module.exports = config;
#!/usr/bin/python3
# -*- coding: utf-8 -*-
#Tark asi: võtab sisse tavalise teksti ja väljastab sama,
# ainult et sõnavormid on asendatud nende lemmadega
# ja KÕIK lõiguvahetused on ka veel alles
import estnltk
import sys
from estnltk import Text;
sisendfailinimi = sys.argv[1]
valjundfailinimi = sys.argv[2]
sisendfail = open(sisendfailinimi,'r')
valjundfail = open(valjundfailinimi,'w',encoding='utf-8')
tekstid = sisendfail.readlines()
#Säilita lõigustus: tee seda iga lõigu kohta eraldu
for tekst in tekstid:
sonad = Text(tekst)
#Siia tulevad selle lõigu lemmad
#lemmamassiiv = []
#vahelemmad = Text(tekst).lemmas
#Kuna analüüs võib olla mitmene, siis jäta igale sõnale alles vaid esimene analüüs
#for vahelemma in vahelemmad:
# if ('|' in vahelemma):
# vahelemma = vahelemma[:vahelemma.index('|')]
#print(vahelemma)
# lemmamassiiv.append(vahelemma)
#lemmad = ' '.join(lemmamassiiv)
#lemmad = ' '.join(Text(tekst).lemmas)
sonad.tag_layer()
lemmad = [w[0] for w in sonad.words.lemma]
lemmad = " ".join(lemmad)
valjundfail.write(lemmad)
valjundfail.write("\n")
sisendfail.close()
valjundfail.close()
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment