Thread Text nahe bei anderem Text (13 answers)
Opened by Raubtier at 2014-06-10 17:36

payx
 2014-06-11 10:24
#175969 #175969
User since
2006-05-04
564 Artikel
BenutzerIn

user image
Hallo Raubtier,

in der Korpuslinguistik spricht man von Textumgebung oder Kontext.

Ich habe mit Deinem Beispiel mal versucht, die Kontextsuche bei Korpora.org beispielhaft nachzuprogrammieren:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/usr/bin/perl

use strict;
use warnings;

# Mögliche Kollokationen (statische Vorgabe)
my %colls = (
    0 => 'vor'
    , 1 => 'nach'
    , 2 => 'vor oder nach'
);

# Das Korpus
my $txt = 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.';

# Der Suchstring (Benutzereingabe)
my $such = "sed diam";

# Die Textumgebungen (Benutzereingabe) mit Abständen (Anzahl Wörter im Zwischenraum) und Kollokationen (s.o. %colls)
my %kontexts = (
    "sit amet" => {'dist' => 3, 'coll' => 1}
    , "eirmod" => {'dist' => 2, 'coll' => 2}
    , "Lorem"  => {'dist' => 8, 'coll' => 0}
);

for my $ktxt (keys %kontexts) {
    my $dist = $kontexts{$ktxt}->{dist};
    my $coll = $kontexts{$ktxt}->{coll};
    my ($s1, $s2) = ($such, $ktxt);
    
    print "Suche '$such' bis zu $dist Textsegmente $colls{$coll} '$ktxt'\n";
    
    my $hit;
    
    for (1..($coll ? $coll : 1)) {
        ($s1, $s2) = ($s2, $s1) if $coll;
        $hit = $1 if $txt =~ /(\b$s1\W*(?:\w+\W+){0,$dist}$s2\b)/i;
        last if $hit;
    }
    
    if ($hit) {
        print "    Treffer: '$hit'\n";
    } else {
        print "    Kein Treffer\n";
    }
}

Es funktioniert mit Deinem Beispiel. Für weitergreifende Anwendungen wird man da noch tunen müssen. Für den professionellen Einsatz würde ich auf eine Search Engine wie Lucene mit SolR oder ElasticSearch zurückgreifen; die können solche Suchen out of the box.

HTH
Grüße
payx

View full thread Text nahe bei anderem Text