Text mining työkaluja?

[viesti Survo-keskustelupalstalla (2001-2013)]

Kirjoittaja: Petri Palmu
Sähköposti:    petri.palmu'at'helsinki.fi
Päiväys: 10.7.2005 16:32

Terve!

Tiedustelisin näkemyksiä ns. text mining työkalujen soveltamisesta
tai rakentamisesta Survolla.

Esimerkkitapaus:
Luokitellaan sairaiskäyntejä potilaan sairauskertomusten perusteella.
Erityisesti etsitään vaikkapa allergiaan tai astmaan liittyviä
indikaatioita, eli onko kyseinen sairaskäynti liittynyt jollain tavalla
allergiaan tai astmaan. "Raakadata" on lääkärin vapaassa muodossa
kirjoitettamaa kertomusta potilaan tilasta. Tästä olisi tavoitteena
vaikkapa luoda indikaattorimuuttujien aineisto ko. sairauteen
liittyvien avainsanojen perusteella:
yskä, päänsärky, kuume, kurkkukipu, nuha, hengenahdistus,...

Testailin R:n agrep-funktion avulla hyvin yksinkertaista kuviteellista
tilannetta, jossa sairaskäyntejä on 4 kpl. Sairaskertomuksessa
esiintyisi tyypillisiä oirekuvauksia, sekä kiinnostuksen kohteena
olevasta että myös mahdollisesti aivan muista taudeista tai
vammoista.


*SAVEP CUR+1,e,tm.r
*# muodostetaan esimerkkiaineisto a
*a <- data.frame("kaynti"=1:4,
*"oire"=c("Nuha, yskä, kurkkukipu", "ei yskää, nuhainen, väsymystä",
*        "kuumetta 38.5, pääsärkyä", "sormimurtuma"))
*a
*# Oireista omat vektori
*oire <- as.character(a[,2])
*#
*# Analysoidaan agrep-funktiolla viiden eri allergiaan tai
*# astmaan mahdollisesti liittyvän avainsanan esiintymistä
*# kussakin käyntitapahtumissa 1-4
*c1 <- agrep("yskä",oire, value=FALSE)
*c2 <- agrep("päänsärky",oire,value=FALSE)
*c3 <- agrep("kuume",oire,value=FALSE)
*c4 <- agrep("kurkkukipu",oire,  value=FALSE)
*c5 <- agrep("nuha", oire, value=FALSE)
*c5
*#
*# Tehdään vastaavat dummyt alkuperäiseen aineistoon matchaamalla
*# ifelse funktiolla
*a$yska     <- ifelse(is.na(match(1:length(oire),c1)),0,1)
*a$paasark <- ifelse(is.na(match(1:length(oire),c2)),0,1)
*a$kuume    <- ifelse(is.na(match(1:length(oire),c3)),0,1)
*a$kurkkukp <- ifelse(is.na(match(1:length(oire),c4)),0,1)
*a$nuha     <- ifelse(is.na(match(1:length(oire),c5)),0,1)
*a
e
*

yllä olevan R-skriptin ajo
/SR tm.r


Alkuperäinen raaka-data:
  kaynti                          oire
1      1        Nuha, yskä, kurkkukipu
2      2 ei yskää, nuhainen, väsymystä
3      3     kuumetta 38.5, pääsärkyä
4      4                  sormimurtuma

Sana "nuha" esintyy aineistossa havaintoriveillä 1 ja 2
[1] 1 2

Lopullinen data:
  kaynti                          oire yska paasark kuume kurkkukp nuha
1      1        Nuha, yskä, kurkkukipu    1       0     0        1    1
2      2 ei yskää, nuhainen, väsymystä    1       0     0        0    1
3      3     kuumetta 38.5, pääsärkyä     0       1     1        0    0
4      4                  sormimurtuma    0       0     0        0    0

Lopullisessa datassa on uusina sarakkeina indikaattorimuuttujat
avainsanojen esiintymisessä ao. tapahtumissa.
Huomataan, että "algoritmi" ei ymmärtänyt käynnissä nro 2 sanan
"ei yskää" merkitystä oikein. Sen sijaan väärinkirjoitettu
"päänsärky" tuli huomoiduksi oikein (ks. /R-HELP agrep).

Vaikuttaa siltä, että homma vaatisi tuekseen mm. sanastoja ja kielen
ymmärtämistä ja tiettyjä (vaativia) teknisiä ratkaisuja.
Mutta kiinnostavaa olisi kuulla näkemyksiä siitä,
missä määrin Survo voisi toimia apuna edellä kuvatun tyyppisissä
tilanteissa. Yhtä hyvin teksti voisi olla alkuperäisessä
tekstitiedostossa tai toimituskentässä.

t. Petri

Vastaukset:

Survo-keskustelupalstan (2001-2013) viestit arkistoitiin aika ajoin sukrolla, joka automaattisesti rakensi viesteistä (yli 1600 kpl) HTML-muotoisen sivukokonaisuuden. Vuoden 2013 alusta Survo-keskustelua on jatkettu entistäkin aktiivisemmin osoitteessa forum.survo.fi. Tervetuloa mukaan!

Etusivu  |  Keskustelu
Copyright © Survo Systems 2001-2013. All rights reserved.
Updated 2013-06-15.