Schlüsselwörter in Oberbegriffe wandeln

OP (Firma: Angeln, Outdoor und Humor) #3633911
Lesenswert?
• ▲
▼
Kennt jemand einen Dienst oder Algorithmus, der Schlüsselwörter in 
Oberbegriffe zusammenfaßt?

Also etwa
1
cola
2
fanta
3
sprite
4
wasser

wird zu
1
Getränke




und



1
cola
2
fanta
3
brot
4
sprite
5
wasser
6
kaffee

wird zu
1
Getränke
2
Essen

oder
1
Nahrungsmittel
#3634041
Lesenswert?
• ▲
▼
I love code!

Die Mathematische beschreibung des Algorüthmus must du noch selber 
finden, wenn du diese willst. Dieser Algorüthmus ist meine eigene 
Erfindung, und sollte zum gewünschten ergebniss führen. Getestet unter 
Google Chrome:
1
<pre>
2
<script>
3

4
var db = {};
5

6
function getSet(x){
7
  var x = x.toLowerCase();
8
  if(!db[x])
9
    db[x]={};
10
  return db[x];
11
}
12

13
function L(begriff,ueberbegriffe){
14
  var b = getSet(begriff);
15
  for( var i in ueberbegriffe)
16
    b[ueberbegriffe[i].toLowerCase()] = getSet(ueberbegriffe[i]);
17
}
18

19
function allDeep(q,d,u,a,md){
20
  if(!md)md=0;
21
  if(d<=0) return null;
22
  if(!u)u={};
23
  if(!a)a={};
24
  for(var i in q){
25
    if(a[i]){
26
     if(md<a[i])a[i]=md;
27
     u[i] = db[i];
28
     continue; // prevent endless recursion
29
    }
30
    u[i]={};
31
    a[i]=md;
32
  }
33
  for(var i in q)
34
    allDeep(q[i],d-1,u[i],a,md+1);
35
  return {"u":u,"a":a};
36
}
37

38
function search(q,deep){
39
  if(deep===undefined)
40
    deep = Infinity;
41
  var r={};
42
  for(var i in q){
43
    var x = allDeep(db[q[i].toLowerCase()],deep);
44
    if(x) r[q[i]] = x;
45
  }
46
  var u = {};
47
  for(var i in r){
48
    for(var j in r[i].a){
49
      var all = true;
50
      var n=0;
51
      var p=0;
52
      for(var k in r){
53
        n++;
54
        if(r[k].a[j]===undefined){
55
          all=false;
56
          break;
57
        }
58
        p += r[k].a[j];
59
      }
60
      if(all){
61
        u[j] = p/n;
62
      }
63
    }
64
  }
65
  
66
  var s=[];
67
  for (var x in u)
68
    s.push([x, u[x]]);
69
  s.sort(function(a, b) {return a[1] - b[1]})
70

71
  return s;
72
}
73

74

75
L("Essen",["Nahrungsmittel"]);
76
L("Getränk",["Nahrungsmittel"]);
77
L("Milchshake",["Getränk","Essen"]);
78
L("Tee",["Getränk"]);
79

80

81
var x = search(["Milchshake","Tee"]);
82
for(var i in x){
83
  document.writeln(x[i][0]);
84
}
85

86
</script>
87
</pre>
#3634429
Lesenswert?
• ▲
▼
Jenö Bender schrieb:
> Daniel A., das Problem ist der Datenbestand(Zu welchen Begriffen gehören
> welche Oberbegriffe).

Genau das ist das Problem.

Denn was für dich recht naheliegend ist

> Also etwa
>
>> cola
>> fanta
>> sprite
>> wasser
> wird zu
>
> Getränke

ist zb. für einen Amerikaner komplett anders. Der würde 'cola', 'fanta' 
und 'sprite' erst mal unter dem Oberbegriff 'sodas' zusammenfassen. Und 
erst der Oberbegriff zu 'sodas' und 'wasser' wäre für ihn 'beverages' 
(also Getränke).

Du wirst also nicht umhin kommen, die Kategorisierung für dich selbst 
und deinen Einsatzzweck mit den für dich passenden Begriffen, 
Kategorisierungen  und Abstufungen in den Kategorisierungen zu 
erstellen. Denn warum fasst du 'cola', 'fante' und 'sprite' nicht zuerst 
in 'Limonaden' zusammen oder in 'kohlensäurehaltige Limonaden' um sie zb 
von 'Fruchtsäfte' zu unterscheiden?
Gast #3634442
Lesenswert?
• ▲
▼
Unter dem Suchbegriff "Ontologie" kannst Du einige Datenbanken finden, 
die (unter anderem) solche Kategorisierungen enthalten. Ob allerdings 
genau Dein Beispiel damit abgedeckt ist, kann ich im Moment nicht sagen. 
Ich bezweifle es eher. Die entsprechenden Arbeitsgruppen werden jedoch 
nicht unfroh sein, wenn Du dazu beiträgst.

Da die Verwendungszwecke meist wesentlich weiter gefasst sind, als für 
Deinen Zweck nötig - sie z.B. auch Definitionen der Zusammensetzung, 
Verwendung etc. enhalten - wirst Du Deine Teilkategorien extrahieren 
müssen.

Eine andere dumme Idee wäre auch, die Listen von 
Online-Lebensmittellieferanten durchzuforsten.
#3634536
Lesenswert?
• ▲
▼
Eine möglichkeit das in Programmcode zu giessen: Eine SOM
(Self organizing Map) o.Ä. Neuronales Netz.

Je nach Eingabedaten kann das dann feststellen:

cola
fanta
sprite
wasser

gehören zu einer Kategorie, wobei das Wasser etwas "weiter davon weg 
ist".

Dass diese Kategorie dann "Getränke" heißt, kann das NN natürlich nicht 
rausfinden.
#3635252
Lesenswert?
• ▲
▼
Die Wikipedia-Kategorien sollten hier helfen. Wikipedia-Dumps sind 
erhältlich.

Dann versuchen mit möglichst wenig Schritten durch Kategorien zu einer 
gemeinsamen Kategorie zu kommen.

Soweit die Theorie...

Mal ausprobiert:
Wasser (Artikel) → Wasser (Kategorie) → Mineralwasser (Unterkategorie) → 
Alkoholfreies Getränk (K)
Cola (Artikel) → Erfrischungsgetränk (K) → Alkoholfreies Getränk (K)

Scheint machbar.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren