„Szerkesztő:Gyimbot” változatai közötti eltérés

A Wikipédiából, a szabad enciklopédiából
Tartalom törölve Tartalom hozzáadva
Gyimhu (vitalap | szerkesztései)
Nincs szerkesztési összefoglaló
Gyimbot (vitalap | szerkesztései)
6. sor: 6. sor:


== Összegképlet robot ==
== Összegképlet robot ==
'''Az összegképlet robot az API változása miatt jelenleg nem üzemel. Az utolsó feltöltött adat állapota 2014. augusztus 17. Részletek [[#uzemszunet|alább]].'''

Az összegképletek összegyűjtésekor a bot az alábbi szócikkekbe ír:
Az összegképletek összegyűjtésekor a bot az alábbi szócikkekbe ír:
{| border="1"
{| border="1"
50. sor: 48. sor:


A botot [[Szerkesztő:Gyimhu|Gyimhu]] üzemelteti.
A botot [[Szerkesztő:Gyimhu|Gyimhu]] üzemelteti.
== Működés ==
Lépések:
# A bot lekérdezi a szócikk névtérből a kémiai sablonokra hivatkozó lapokat. Egyenként letölti őket, és kinyeri belőlük az összegképletet.
# Az összegképletek listáját korrigálja a kézzel megadott összegképletekkel, kihagyja belőlük a kézzel megadott szócikkeket.
# Generálja a wiki-lapokat.
# Lekérdezi a letöltött lapok létrehozási és utolsó módosítási dátumát és az azt végző szerkesztőt.
# Statisztikákat készít az új lapokról.
# Feltölti a lapokat a Wikipédiára.
A bot működésének fontos alapelve, hogy nem köti meg a szócikkek alakját, vagyis nem korlátozza a szerkesztőket, hanem alkalmazkodik hozzájuk. (Ez minden botra érvényes kellene legyen.)


A bot programjai linux shell scriptek és C programok. Debian disztribúcióban az amd64-re fordított kód és a forrás megtalálható a http://www.gyimesilaszlo.hu lapon, a <tt>kemiabot</tt> csomagban. Az alábbi rövid leírásnál több technikai részlet található a man lapokon.
{{anchor|stat}}A legutolsó dump dátuma: {{A dump dátuma}}
* az utolsó futás ideje: 2014. szeptember 7.
* a használt adatbázis dump: http://dumps.wikimedia.org/huwiki/20140907/ szeptember 7.]


=== Az összegképletes lapok összegyűjtése ===
* Géppel felismert vegyület: 1972
Kémiai sablonok:
* Hibásan felismert (a fentin felül): 8
* {{sl|Chembox}}
* Kézzel hozzáadott vegyület: 34
* {{sl|Chembox_new}}
* Vegyület összesen: 2006
* {{sl|Chembox új}}
* Felismert összegképlet: 1879
* {{sl|Drugbox}}
* Fel nem ismert összegképlet: 93
* {{sl|Gyógyszeresdoboz}}
* Kézzel megadott összegképlet az új vegyületekkel együtt: 73
* {{sl|Vegyület_infobox}}
* Összegképlet összesen: 1952
A shell script neve <tt>kembot</tt>, ami egyúttal le is kérdezi a lapokat (lásd alább). A lapok összegyűjtésére a <tt>sablhiv</tt> scriptet hívja a wikiscript csomagból a sablonra hivatkozó lapok lekérdezésére.
* DISPLAYTITLE: 16
* Bemenő fájl: –
* Eredményfájl: <tt>kembot.mol</tt>.
A fenti sablonokra hivatkozó laplisták lekérdezése párhuzamosan történik, így a futási idő néhány másodperc. A sávszélességet maximálisan kihasználja, a processzor- és diszkigény minimális, .


=== A robot futtatása ===
=== Az összegképletek lekérdezése ===
Ezt is a <tt>kembot</tt> csinálja. A lapok lekérdezésére a <tt>wikiszoveg</tt> scriptet hívja a wikiscript csomagból, a lap parszolására és az összegképlet kinyerésére a <tt>kemia</tt> nevű C-programot.
# [[#A wikidump letöltése|A wikidump letöltése]]. Futási idő 10–15 perc.
# [[Szerkesztő:Gyimbot/t3.sql|A mysql táblák létrehozása indexek nélkül]]. A huwiki-n a mediawiki verziójának változásával a szkript változhatik. A végrehajtási idő olyan rövid, hogy nem mérhető.
# A huWiki importálása: <code>java -jar mwdumper.jar pages-articles.xml</code>. A futási idő kb. negyed óra.
# [[Szerkesztő:Gyimbot/t3ind.sql|Indexek létrehozása]] a beimportált táblákra. Futási idő 3–4 perc.
# [[Szerkesztő:Gyimbot/drugbox.sql|Munkatábla létrehozása]] az összegképleteket tartalmazó szócikkek számára. Memóriakorlátos a régi konfigurációban, ezért érdemes leállítani a gnome-ot és saját wikit. Az új konfigurációban diszkkorlátos. Futási idő a régi konfigurációban 4–4½ óra, az újban 3½ perc. (!)
# A [[Szerkesztő:Gyimbot/Kézi javítólista|kézi javítólista]] utolsó változtatásainak ellenőrzése, eltárolás a helyi filerendszerben (<tt>kezi.txt</tt>).
# [[#Az összegképletek kigyűjtése|Az összegképletek kigyűjtése]]
# [[#A wiki-lapok generálása|A wiki-lapok generálása]], [[Szerkesztő:Gyimbot/robot|feltöltés a helyi wiki-be]] ellenőrzés céljából.
# [[Szerkesztő:Gyimbot/stat|statisztika előállítása]], [[#stat|jelen lap]] kézi szerkesztése. A kapott lap összevetése a helyi wiki [[Sablon:Összeglista|összegképlet lap|]] utolsó és utolsó előtti változatának különbségével. A új, [[Sablon:Nincs összegképlet|összegképlet nélküli lapok]] ellenőrzése, szükség esetén az összegképlet javítása és az [[Szerkesztő:Gyimbot/Kézi javítólista|összegképlet kézi megadása]]. (A következő futtatáskor ne felejtsük el törölni a javított összegképletű lapokat a kézi listából.) A vegyületekben szereplő elemek számának változása esetén a [[Szerkesztő:Gyimbot/wtabl.c|wtabl.c]] program módosítása.
# az utolsó letöltés óta keletkezett [[Szerkesztő:Gyimbot/ujvegy|új lapok]] letöltése, kézi javítása, a [[Wikipédia:Kémiaműhely#.C3.9Aj_vegy.C3.BCletek|kémia munkacsoport lapjának]] szerkesztése
# [[Szerkesztő:Gyimbot/robot|a lapok feltöltése]] huwiki-be.


Az eredmény ilyen alakú:
=== Konfiguráció ===
* processzor: 2 darab 2-magos Intel(R) Core(TM) i5-3210M, 2.5 GHz
* memória: 4G
* operációs rendszer: debian 7.4 (wheezy)

Szükséges csomagok: mysql, libmysqlclient-dev, gcc, wget, openjdk-6-jre.<ref>Vagy más Java-csomag, mely képes az <tt>mwdumper.jar</tt>-t futtatni.</ref>

=== A wikidump letöltése ===
FNEV=pages-articles.xml.bz2
rm -f $FNEV
wget -t1 "http://dumps.wikimedia.org/huwiki/latest/huwiki-latest-pages-articles.xml.bz2" -O - | bunzip2 -c >$FNEV

=== Az összegképletek kigyűjtése ===
* [[Szerkesztő:Gyimbot/olista|Az összegképlet lapok generálása]]. A gépi listát (<tt>gepi.txt</tt>) előállító program (<tt>hufo</tt>) [[C (programozási nyelv)|C nyelven]] íródott, futási ideje kb. egy perc. Ez a robot magja.

Az összegképlet-lista egyszerű szövegfile. Két példasor:
Aceton-peroxid
Aciklovir|C=8|H=11|N=5|O=3
Az eredményfile-ban minden munkatáblabeli szócikk szerepel, ami nincs a tiltólistán (a [[Szerkesztő:Gyimbot/Kézi javítólista|kézi javítólista]] összegképlet nélküli sorai). Az első sorban a C-program nem találta meg az összegképletet, a másodikban a szócikkbeli összegképlettel azonos sorrendben sorolta fel az elemeket.

Ugyanilyen szerkezetű a [[Szerkesztő:Gyimbot/Kézi javítólista|kézi javítólista]] is. A lapgeneráló automatikusan összedolgozza a kettőt.

Ugyanez a program gyűjti ki és írja file-ba a DISPLAYTITLE sablonokat. A teljes eredményfile (<tt>hufo.ali</tt>):
<pre>
<pre>
Aceton-peroxid
Alfa-ketoizokapronsav|''alfa''-Ketoizokapronsav
Acibenzolár|C=7|N=2|S=2|O=1|H=4
B12-vitamin|B<sub>12</sub>-vitamin
Delta-valerolakton|''δ''-Valerolakton
Dinitro-orto-krezol|Dinitro-''orto''-krezol
Gamma-valerolakton|''γ''-Valerolakton
N-klórszukcinimid|''N''-klórszukcinimid
N-metilkoniin|''N''-Metilkoniin
P-Toluolszulfonsav|''p''-Toluolszulfonsav
Terc-butil-bromid|''terc''-Butil-bromid
</pre>
</pre>
Az első esetben a parszer nem talált összegképletet a lapon, több különbözőt talált, vagy az összegképletet nem tudta értelmezni.<ref>Az aceton-peroxid esetén a dimer és a trimer képlete is meg van adva a szócikkben, ugyanabban a paraméterben, amint ez a hibakimenetben is látható.</ref> Az utóbbi leggyakoribb okai:
* polimer
* kristályvíz
* töltés/ion
* több képlet, vagy ugyanaz a képlet többféle alakban.
A kémiai sablonok lehetővé teszik több eltérő összegképlet megadását, és ezt a wiki parszere nem veszi észre, mert
* többféle paraméterben adhatók meg: <tt>Formula</tt>, <tt>Képlet</tt>, <tt>kémiai_képlet</tt>, <tt>chemical_formula</tt>. Az összegképlet vegyjel-paraméterekkel is megadható.
* a három <tt>chembox</tt> típusú sablon alsablonokat hívhat, melyek szintén elfogadják a fenti összegképlet-paramétereket.


Fájlok:
=== A wiki-lapok generálása ===
* Bemenő fájl: <tt>kembot.mol</tt>.
A lapgeneráló lelke két C-program. Mindkettő a fent leírt összegképlet-file-t olvas be.<ref>A két program ugyanazokból a [[Szerkesztő:Gyimbot/wtabl.c|forrásfile]]-okból áll. A különbség a C-fordítónak adott kapcsoló, melyet a <tt>main()</tt>- tartalmazó C-programban az <code>#ifdef</code> preprocesszor-utasítás figyel.</ref> A <tt>wossz</tt> lista, a <tt>wtabl</tt> táblázat alakú weblapot állít elő.
* Eredményfájl: <tt>kembot.kepl</tt>.
100 Mbit-es hálózatban a futási idő kb. negyed óra. A processzor- és diszkhasználat minimális.


=== Kézi korrekció ===
Az első paraméter az összegképlet-file. Ha a program második filenevet is kap, kiírja az elemgyakoriságokat is (melyeket egyébként is figyel a táblázatos weblap miatt).
Két célja van:
* a parszer által fel nem ismert összegképlet megadása
* szócikk elhagyása az összegképletek közül. Pl. a {{hulink|Béta-receptor-blokkolók}} hívja a <tt>Drugbox</tt> sablont, ezért a gépi listában benne lesz, viszont az összegképlet értelmetlen egy vegyületcsoportra (melyek ráadásul kémiailag nem is hasonlóak).


A korrigálni kívánt információt egy kézzel szerkesztett fájlban kell megadni (<tt>kezi.txt</tt>), melynek alakja azonos a gépi eredményfájléval. Az értelmezésben annyi különbség van, hogy a <tt>kezi.txt</tt> képletet nem tartalmazó szócikkeit törölni kell a gép által megtaláltak közül.
A lapokat egyetlen [[Szerkesztő:Gyimbot/okepl|shell szkript]] állítja elő a fenti két C-program segítségével. Az összegképlet-listába bedolgozza az elemgyakoriságot egy második oszlopba. Az elemekre szűkített táblázatoknál a <tt>wtabl</tt> inputja a <tt>hufo.txt</tt> elemre szűrt változata. Az elemek listáját és a generálandó file-ok nevét a <tt>wiki.txt</tt> tartalmazza.


A kézi lista elsőbbséget élvez a géppel előállítottal szemben. Ha egy szócikk mindkét listában benne van, a gépiből töröljük. Ez lehetővé teszi a gépi összegképlet felülbírálását is (bár remélhetőleg erre nem lesz szükség).
A lapok a wiki alkönyvtárban keletkeznek, a szócikk nevével azonos filenévvel.


A feladat tehát két lista összefésülése, melyet az <tt>olista</tt> script végez. Paraméterként megadható a gépi összegképletlista arra az esetre, ha az más módon (pl. a bot régebbi, a wikidump-ot használó verziójával) állt elő.
=== A lapok feltöltése a magyar Wikipédiára ===
A műveletet a wiki-terminológia nem feltöltésnek, hanem <tt>edit</tt>-nek nevezi.


* Bemenő fájl: <tt>kezi.txt</tt>, <tt>kembot.kepl</tt>.
A feltöltő [[Szerkesztő:Gyimbot/robot|shell szkript]] a wiki alkönytár teljes tartalmát feltölti a Szerkesztő:Gyimbot alkönyvtáraiba, a filenévvel azonos szócikk névre.
* Eredményfájl: <tt>hufo.kepl</tt>.


A futási idő néhány másodperc erős diszkhasználattal. Hálózatot nem, processzort minimálisan használ.
{{anchor|uzemszunet}} A feltöltő shell-script alábbi sora az API változása miatt nem működk:
<syntaxhighlight lang="bash">
$WGET --load-cookies $KUKI -O $FILE --post-file $MUNKA \
"$URL/api.php?action=edit&bot&format=$FORMAT&title=$CIM&recreate&token=$TOKEN"
</syntaxhighlight>


=== Az összegképlet lapok előállítása ===
A <tt>$FILE</tt>-be visszaadott érték korábban:
Az összegképletek fent leírt alakú listájából wiki-lapokat állít elő egy külön könyvtárba. A gyakori elemekről külön lap készül, melynek minden vegyülete tartalmazza az elemet.
<pre>
Array
(
[edit] => Array
(
[result] => Success
[pageid] => 345
[title] => Sablon:Berilliumvegyületek
[nochange] =>
)


* Bemenő fájl: <tt>welem.txt</tt>, <tt>wiki.txt</tt>, <tt>hufo.ali</tt>, <tt>hufo.kepl</tt>.
)
* Eredményfájlok a huwiki alkönyvtárban.
</pre>


A script neve <tt>okepl</tt>, mely a <tt>wtabl</tt> és <tt>wossz</tt> nevű (majdnem azonos) C-programot hívja. Az erőforrásigény elhanyagolható.
A változás után:
<pre>
Array
(
[warnings] => Array
(
[txt] => Array
(
[*] => format=txt has been deprecated. Please use format=json instead.
)


=== Statisztika ===
)
Lekérdezi a szócikkek létrehozási és módosítási idejét. Évenkénti/havonkénti statisztikát csinál.


=== A lapok feltöltése ===
[servedby] => mw1207
Egyelőre tesztüzem van: kézzel.
[error] => Array
(
[code] => mustposttoken
[info] => The 'token' parameter must be POSTed
)

)
</pre>
=== Teendők ===
* {{pipa}} {{sl|DISPLAYTITLE}} a vegyületek nevében
* {{pipa}} helyközök a vegyületek nevében
* {{pipa}} a fenti két névformázás a hiányzó összegképleteknél is
* {{pipa}} botstring wget-ben
* {{sl|kisbetűscím}}: 250 darab. Ebből kémia:
** Alfa-propiolakton 11611631
** Α-ketoglutársav 12382187


== Újraparszolás ==
== Újraparszolás ==

A lap 2018. április 9., 21:46-kori változata

Két botom van:

  • A Dal infobox paramétereinek összegyűjtése és tárolása a Modul:Kották metaadatai lapon. A bot forrása és amd64-es binárisa elérhető debian repositoryból (wikikotta csomag).
  • A kémiai lapok összegképleteinek összegyűjtése. A bot átdolgozása most[1] folyik.

A kémiai bot elsődleges feladata a magyar Wikipédia kémiai lapjairól összegyűjteni az összegképleteket. A másik alkalmazása lapok újraparszolása.

Összegképlet robot

Az összegképletek összegyűjtésekor a bot az alábbi szócikkekbe ír:

A robot által feltöltött lap Hivatkozás a fő névtérből
Összeglista Vegyületek összegképlete
Összegtáblázat Vegyületek összegképlet-táblázata
Berilliumvegyületek Berilliumvegyületek összegképletének listája
Brómvegyületek Brómvegyületek összegképletének listája
Kalciumvegyületek Kalciumvegyületek összegképletének listája
Klórvegyületek Klórvegyületek összegképletének listája
Fluorvegyületek Fluorvegyületek összegképletének listája
Jódvegyületek Jódvegyületek összegképletének listája
Káliumvegyületek Káliumvegyületek összegképletének listája
Nitrogénvegyületek Nitrogénvegyületek összegképletének listája
Nátriumvegyületek Nátriumvegyületek összegképletének listája
Foszforvegyületek Foszforvegyületek összegképletének listája
Kénvegyületek Kénvegyületek összegképletének listája
Vasvegyületek Vasvegyületek összegképletének listája
Magnéziumvegyületek Magnéziumvegyületek összegképletének listája
Rubídiumvegyületek Rubídiumvegyületek összegképletének listája
Talliumvegyületek Talliumvegyületek összegképletének listája
nincs összegképlet Vita:Vegyületek összegképlete

A botot Gyimhu üzemelteti.

Működés

Lépések:

  1. A bot lekérdezi a szócikk névtérből a kémiai sablonokra hivatkozó lapokat. Egyenként letölti őket, és kinyeri belőlük az összegképletet.
  2. Az összegképletek listáját korrigálja a kézzel megadott összegképletekkel, kihagyja belőlük a kézzel megadott szócikkeket.
  3. Generálja a wiki-lapokat.
  4. Lekérdezi a letöltött lapok létrehozási és utolsó módosítási dátumát és az azt végző szerkesztőt.
  5. Statisztikákat készít az új lapokról.
  6. Feltölti a lapokat a Wikipédiára.

A bot működésének fontos alapelve, hogy nem köti meg a szócikkek alakját, vagyis nem korlátozza a szerkesztőket, hanem alkalmazkodik hozzájuk. (Ez minden botra érvényes kellene legyen.)

A bot programjai linux shell scriptek és C programok. Debian disztribúcióban az amd64-re fordított kód és a forrás megtalálható a http://www.gyimesilaszlo.hu lapon, a kemiabot csomagban. Az alábbi rövid leírásnál több technikai részlet található a man lapokon.

Az összegképletes lapok összegyűjtése

Kémiai sablonok:

A shell script neve kembot, ami egyúttal le is kérdezi a lapokat (lásd alább). A lapok összegyűjtésére a sablhiv scriptet hívja a wikiscript csomagból a sablonra hivatkozó lapok lekérdezésére.

  • Bemenő fájl: –
  • Eredményfájl: kembot.mol.

A fenti sablonokra hivatkozó laplisták lekérdezése párhuzamosan történik, így a futási idő néhány másodperc. A sávszélességet maximálisan kihasználja, a processzor- és diszkigény minimális, .

Az összegképletek lekérdezése

Ezt is a kembot csinálja. A lapok lekérdezésére a wikiszoveg scriptet hívja a wikiscript csomagból, a lap parszolására és az összegképlet kinyerésére a kemia nevű C-programot.

Az eredmény ilyen alakú:

Aceton-peroxid
Acibenzolár|C=7|N=2|S=2|O=1|H=4

Az első esetben a parszer nem talált összegképletet a lapon, több különbözőt talált, vagy az összegképletet nem tudta értelmezni.[2] Az utóbbi leggyakoribb okai:

  • polimer
  • kristályvíz
  • töltés/ion
  • több képlet, vagy ugyanaz a képlet többféle alakban.

A kémiai sablonok lehetővé teszik több eltérő összegképlet megadását, és ezt a wiki parszere nem veszi észre, mert

  • többféle paraméterben adhatók meg: Formula, Képlet, kémiai_képlet, chemical_formula. Az összegképlet vegyjel-paraméterekkel is megadható.
  • a három chembox típusú sablon alsablonokat hívhat, melyek szintén elfogadják a fenti összegképlet-paramétereket.

Fájlok:

  • Bemenő fájl: kembot.mol.
  • Eredményfájl: kembot.kepl.

100 Mbit-es hálózatban a futási idő kb. negyed óra. A processzor- és diszkhasználat minimális.

Kézi korrekció

Két célja van:

  • a parszer által fel nem ismert összegképlet megadása
  • szócikk elhagyása az összegképletek közül. Pl. a Sablon:Hulink hívja a Drugbox sablont, ezért a gépi listában benne lesz, viszont az összegképlet értelmetlen egy vegyületcsoportra (melyek ráadásul kémiailag nem is hasonlóak).

A korrigálni kívánt információt egy kézzel szerkesztett fájlban kell megadni (kezi.txt), melynek alakja azonos a gépi eredményfájléval. Az értelmezésben annyi különbség van, hogy a kezi.txt képletet nem tartalmazó szócikkeit törölni kell a gép által megtaláltak közül.

A kézi lista elsőbbséget élvez a géppel előállítottal szemben. Ha egy szócikk mindkét listában benne van, a gépiből töröljük. Ez lehetővé teszi a gépi összegképlet felülbírálását is (bár remélhetőleg erre nem lesz szükség).

A feladat tehát két lista összefésülése, melyet az olista script végez. Paraméterként megadható a gépi összegképletlista arra az esetre, ha az más módon (pl. a bot régebbi, a wikidump-ot használó verziójával) állt elő.

  • Bemenő fájl: kezi.txt, kembot.kepl.
  • Eredményfájl: hufo.kepl.

A futási idő néhány másodperc erős diszkhasználattal. Hálózatot nem, processzort minimálisan használ.

Az összegképlet lapok előállítása

Az összegképletek fent leírt alakú listájából wiki-lapokat állít elő egy külön könyvtárba. A gyakori elemekről külön lap készül, melynek minden vegyülete tartalmazza az elemet.

  • Bemenő fájl: welem.txt, wiki.txt, hufo.ali, hufo.kepl.
  • Eredményfájlok a huwiki alkönyvtárban.

A script neve okepl, mely a wtabl és wossz nevű (majdnem azonos) C-programot hívja. Az erőforrásigény elhanyagolható.

Statisztika

Lekérdezi a szócikkek létrehozási és módosítási idejét. Évenkénti/havonkénti statisztikát csinál.

A lapok feltöltése

Egyelőre tesztüzem van: kézzel.

Újraparszolás

A wiki a szócikk mentésekor hozza létre a szócikk hivatkozásait. Ha a szócikk által hívott sablonok változnak, a hivatkozások ezt nem követik. Erre szolgál a reparse. A filelist.txt-ből veszi az újraparszolandó lapok listáját. Lekérdezi és változtatás nélkül visszatölti őket.

A laptörténetben ebből semmi nem látható, de a hívott sablonok hivatkozásai megváltoznak.

Jegyzetek

  1. 2018. március
  2. Az aceton-peroxid esetén a dimer és a trimer képlete is meg van adva a szócikkben, ugyanabban a paraméterben, amint ez a hibakimenetben is látható.