ARFF fájlok olvasása az Elixir segítségével - Oliver Wyman Digital Engineering
A legjobb Oliver Wyman Labs webhelyélményért,
kérjük, frissítse böngészőjét IE9 vagy újabb verzióra
ARFF fájlok olvasása az Elixir segítségével
Ha gépi tanulási megközelítést valósít meg, akkor valószínűleg nyilvánosan elérhető adatkészleteken szeretné tesztelni. Ezen adatkészletek nagy része a Weka által létrehozott ARFF fájlformátumot használja. Nincs tudomásom egyetlen Elixir ARFF olvasóról sem, ezért felfedezem, hogyan írhatok egyet (‘Arfficionado’) ebbe a blogba.
Az ARFF rövid vázlata
Az ARFF (Attribute-Relation File Format) egy fejlécszakaszt és egy adatszakaszt határoz meg. A fejléc szakasz deklarálja az adatkészlet nevét, valamint az adatkészlet attribútumainak nevét és típusát. Az adat szakasz soronként egy példányt határoz meg az attribútumértékek felsorolásával (a fejléc szakaszban megadott attribútum sorrendben), majd egy opcionális példány súlyával. Vesszőket vagy tabulátorokat használnak az értékek elválasztására, és az értékek körüli szóközt nem szabad figyelmen kívül hagyni. A hiányzó értékeket a? Jelöli. A% -ot követő bármely szöveget a sor végére vonatkozó megjegyzésként kezeljük. A szóközöket, vesszőket stb. Tartalmazó értékeket egy- vagy kettős idézőjelben lehet idézni (amelyek hátlapon is elkerülhetők). Üres és megjegyzés sorok megengedettek. Létezik egy ritka kódolási mód is az adatrészhez, amely index-érték párként felsorolja a nulla nem attribútumokat. Az attribútumok lehetnek numerikus (egész vagy valós), nominális (felsorolás), karakterlánc (szövegre alkalmas), dátum (ISO-8601 vagy java.text.SimpleDateFormat karakterlánc) vagy relációs (jövőbeli használatra).
Várható ARFF olvasóhasználat
Számos dolgot érdemes elvégeznie az ARFF fájlokkal, például:
- szűrje a példányokat bizonyos kritériumok szerint
- gyűjtse össze az összes példányt, és adja vissza listaként
- helyezzen be példányokat egy ets táblába
- olvassa el és dolgozza fel a fájlt kötegenként
Ésszerűnek tűnik egy ARFF fájlt eladni az olvasónak sorokként és átadni egy visszahívási modult, amely biztosítja a kívánt specifikus viselkedést.
Az olvasó elemzi az ARFF fájlt, és minden releváns eseményhez meghív egy megfelelő kezelő visszahívást. Az olvasó nyomon követi a kezelő állapotát. Visszahívás hívásakor az aktuális állapotban van, és cserébe megkapja a frissített állapotot. Ez lehetővé teszi a kezelő modul számára az adatok felhalmozását, az ets referenciák kezelését stb. A végleges kezelő állapotot visszaküldi a hívó.
Megvalósítási ötletek
Az ARFF soronként tokenizálható és elemezhető. A rekurzív süllyedés megfelelő technika erre. A hivatalos „spec” egységtesztekké fordítható. Az attribútum információk több vonalon vannak elosztva, és ezeket fel kell gyűjteni, hogy felhasználhatók legyenek a példányértékek megfelelő öntésére.
A bemeneti adatfolyamot az Enum.reduce_while/3 felhasználhatja, amely végül lehetővé teszi, hogy a kezelő modul visszahívásai megszakítsák a feldolgozást, mielőtt a folyam kimerülne. A kezelő visszahívásoknak vissza kell térniük, hogy ez működjön.
Miután az alapstruktúra a helyén van, érdemes tesztelni nagy ARFF fájlgyűjtemények feldolgozásával. A jövőben ez kiterjeszthető az oda-vissza tesztekre is, ahol a kezelő egy kimeneti ARFF fájlt hoz létre a fogadott eseményekből, és a bemenetnek és a kimenetnek meg kell állapodnia (mínusz a szóközök különbségei, amelyek valószínűleg elvesznek).
Végrehajtás
Követtem a fent vázolt ötleteket, és végül 231 sor Elixir kódot kaptam, amelyet elég kompaktnak tartok. A jelenlegi inkarnációjában az Arfficionado a következő kezelő visszahívásokat határozza meg:
A line_comment/2 és a start_data/2 egyetlen célja az esetleges megjegyzések rögzítése a bemeneti fájlban, a jövőbeni oda-vissza tesztek lehetővé tétele érdekében. Annak érdekében, hogy csökkentse a viselkedést, lehet, hogy valamikor eltávolítom ezeket a visszahívásokat. A/3, az attribútumok/2 és különösen a/4 visszahívási reláció tényleges ARFF információkat szolgáltat. A close/1 hívás akkor történik, amikor a bemeneti adatfolyam kimerült vagy megszakadt, hogy a kezelő modul lehetőséget kapjon a takarításra.
Noha az Arfficionado a tesztfájljaim nagy részét jól kezeli, jelenleg ennek vannak bizonyos korlátai:
- Az ARFF lehetővé teszi az egyedi dátum/idő formátumokat a java.text.SimpleDateFormat konvencióit követve. Nulla ciklust töltöttem erre, és ezért az Arfficionado csak az ISO-8601 formátumot támogatja (és nem függ külső könyvtáraktól).
- Az idézett karakterláncokban a hátsó perjel menekülés jelenleg nem támogatott.
- Az ARFF megengedi a „relációs” típusú attribútumokat, amelyek támogatását még nem valósítottam meg.
- Az ARFF-nak ritka kódolási módja van, amit én sem hajtottam végre.
- A legtöbb ARFF fájl jól formázott, de néhány eltér a „specifikációtól”. A kellően meghibásodott ARFF fájlok kivételekhez vezetnek az olvasás során. A hibakezelési/helyreállítási mechanizmus előnyös lehet.
- A kezelő visszahívások típus-specifikációja lényegesen szigorúbbá tehető.
- Nem értékeltem az Arfficionadót, és arra számítok, hogy van még mit javítani.
Következtetés és jövőbeli munka
Szórakoztató volt az Elixir ARFF olvasó első verziójának elkészítése. Legfontosabb prioritásaim egy jó hibakezelési/helyreállítási mechanizmus hozzáadása és az Arfficionado engedékenyebbé tétele az ARFF specifikációtól általánosan megállapított (jóindulatú) eltérések tekintetében.
- Tekintse át a Taylor Glass és a Chrome digitális mérleget - mérlegelem
- Más világok; Manga akció! Alicia Diet Quest digitális debütáló 15 fantasy sorozata akár 50% kedvezménnyel
- Egyszerű, hatékony megerősítési technika, amely a Warrior fórumon működik - A # 1 digitális marketing fórum és
- Új-Zéland legjobb árú üzlete Comvita Propolis Herbal Elixir 200ml természetes egészségügyi kiegészítők,
- Uljukajev orosz gazdasági exminiszter befejezi az Orosz Jogi Információs Ügynökség esettanulmányainak olvasását