Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Textabfrage

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von Kabelaffe2012, 16 März 2013.

  1. Kabelaffe2012

    Kabelaffe2012 Neuer Benutzer

    Hallo alle zusammen,

    Ich habe eine ziemlich mühsame Aufgabe, wo ich jetzt die Idee hatte, dies vielleicht über die SQL zu lösen. Hoffe mir kann jemand Helfen, würde mir ewig viel Arbeit dadurch sparen:

    Ich habe im SQL 2012 eine Tabelle in der in Spalte 1 verscheiden Nummern stehen, in Spalte zwei stehen Texte. Viele dieser Texte dürften gleiche Worte haben (vielleicht Groß und Klein geschrieben) und das Skript, das ich benötige, sollte eine Abfrage starten, wie viel gleiche Match`s, also Worte sind in den jeweiligen Texten.
    Ziel dabei ist es, eine Auswertung zu bekommen, dass die Nummer 12345 mit der Nummer 7890 in Spalte 1 eine gleiche Anzahl von X Worten hat. Mehrfachanzeige ist dabei auch möglich, bedeutet das das Ergebnis auch auf Mehrer Nummern passen kann.

    Geht so was über ein Script zu Lösen ????
    Danke für die Info`s
     
  2. akretschmer

    akretschmer Datenbank-Guru


    Das klingt mir nach völlig verkorkster Idee, aber was solls...

    Code:
    test=*# select * from kabelaffe ;
    i |                        t
    ---+--------------------------------------------------
    1 | das ist ein völlig sinnfreier text
    2 | noch ein absolut sinnfreier text
    3 | es gibt wohl kaum einen text, der sinnfreier ist
    (3 rows)
     
    Time: 0,161 ms
    test=*# select wort, array_agg(i) from (select i, regexp_split_to_table(t,' ') as wort from kabelaffe) foo group by wort ;
        wort    | array_agg
    ------------+-----------
    absolut    | {2}
    das        | {1}
    der        | {3}
    ein        | {1,2}
    einen      | {3}
    es        | {3}
    gibt      | {3}
    ist        | {3,1}
    kaum      | {3}
    noch      | {2}
    sinnfreier | {2,1,3}
    text      | {2,1}
    text,      | {3}
    völlig    | {1}
    wohl      | {3}
    (15 rows)
     
    Time: 0,411 ms
    
    in der Spalte array_agg (könnte man auch anders benennen) steht, in welcher ID der Ursprungstabelle das Wort vorkommt. Ist es das, was Du suchst?

    Edit: mit PostgreSQL gemacht.


    Andreas
     
  3. Kabelaffe2012

    Kabelaffe2012 Neuer Benutzer

    Hmm, hätte die Frage vielleicht anderst Stellen sollen, ist falsch Verstanden worden, probiere es nochmals:

    Tabelle enthält Artikel die Nummern haben. Problem ist, das es die gleichen Artikel in der Tabelle gibt, die verschieden Schreibweisen haben und verschieden Nummernkreise. Die Hauptnummern sind Fünfstellig und die Nebennummer haben das Format 01.01.01, also immer zwei Zaheln mit je ienem Punkt getrennt.
    Sinn und Zweck ist es, die Dupletten zu finden unter allen Artikel ( 140 TSd) mit so wenig wie möglicher Handarbeit. Das Script sollte Nachschauen wieviiel gleiche Keywords es hat und dies als Ergebniss ausgeben. Habe die Keywords mal Fett Markiert und das Ergebniss auch Fett unter jedes Beispiel geschrieben

    Hier ein paar Beispiele:

    Beispiel 1:
    Artikelnummer Hauptstamm:
    10310

    Text:
    PVC Mantelleitung NYM-J 3x2,5
    nach DIN VDE 0250 in Leerrohr,

    Installationskanal oder Kabelträger

    einziehen

    Artikelnummer Nebenstamm:
    01.01.13

    Text:
    PVC-Mantelleitung DIN VDE 0250in
    Teillängen liefern und auf vorhandene
    Pritschen und Wannen verlegen, in
    Elektroinstallationskanäle einlegen oder
    in Leerrohre einziehen als:

    NYM-J 3x2,5 qmm Cu 72

    Ergebniss:
    Nebennummer: 01.01.13
    Keywords: Treffer PVC, Mantelleitung, NYM-J, 3x2,5,DIN,VDE,0250,einziehen,Installations,Leerrohr
    Treffernummer: 10310

    Hierbei können aber auch mehrer Treffernummern aufgeschlüsselt werden

    Beispiel 2:
    Artikelnummer:
    26851

    Text:
    Universalschalterfür Unterputzmontage
    mit Standardwippe, Kombi- oder Einzel-
    abdeckung, Fabrikat: "Gira Standard
    System 55" (reinweiß), ohne uP-Dose,
    liefern und montieren

    Nummer Nebenstamm:
    04.01.06

    UP- Schalt- und Steckgeräte für Einzel-
    oder Kombiabdeckung liefern und
    montieren als:

    UP-Universalschalter, weiß/reinweiß
    Ergebniss:
    Nebennummer: 04.01.06
    Keywords Treffer: Universalschalter,Einzel,Abdeckung,reinweiß,liefern,und,montieren
    Treffernummer: 26851

    Beispiel 3:
    Artikelnummer:
    22272

    Text:
    Flexibles Kunststoffpanzerrohr M 20
    hitzebeständig bis 60°C, für alle
    Installationen Auf-, Im- oder Unterputz
    und im Beton, für mittlere Druckbean-
    spruchung, Unterputz mit Mauerschlitz,
    liefern und montieren

    Nummer Nebenstamm:
    02.02.53

    Text:
    Elektroinstallationsrohrnach VDE 0605
    DIN EN50086-1, DIN EN50086-2-2,
    Klassifizierung 3341, Maße nach DIN EN
    60423 bestehend aus:
    PVC-U/ mit Mantel aus PVC-P flammwidrig,
    selbstverlöschend Dauergebrauch und
    Installationstemperatur min.-25 max.+
    60ø C,
    Farbe grau RAL 7035
    mittlere Druckfestigkeit 720 N/5 cm
    mittlere Schlagfestigkeit für alle AP-
    und UP-Installationen, für die
    Verwendung im Rüttel-, Schütt- u.
    Stampfbeton sowie auf Rohfußboden od.
    Estrich
    Montagehöhe bis 3 mtr.
    gleichw. Fränk. Rohrwerke/Hegler liefern
    und verlegen als:

    biegsames Kunststoffrohr AP- mit
    Doppelschellen
    Typ FFKuS-EM-F/ESPM, Größe: EN20

    Ergebniss:
    Nebennummer: 02.02.53
    Keywords Treffer: Kunststoff,Rohr, 20
    Treffernummer: 22272
    Die Sache ist echt verzwickt und ich weiss nicht ob man das über ein Script lösen kann. Wenn als Ergebniss es so Angezeigt wird wie im Beispiel wäre das Genial aber ich habe keine Ahnung ob es geht. Klasse wäre wenn man die Texte der Ergebnissnummern auch noch Anzeigen würde. Ergebniss wäre: ca. 1 Jahr Arbeit per Hand gespart

    Bin mal Gespannt ob jemand ein Lösung weiß

    Danke schon mal
     
  4. akretschmer

    akretschmer Datenbank-Guru

    Okay, ich ändere meine Meinung. Das ist keine verkorkste Idee, sondern vorhandener verkorkster Datensalat.

    Sieht so aus, als ob da alles als Text gespeichert ist. Das klingt, als ob ihr viele Azubis braucht, sorry. Wie soll ein Programm z.B. wissen, in Datensatz A gelten diese Keywords und in B ganz andere? Da kannst wohl nur noch mit Volltextsuche drin rumstochern.

    Andreas
     
  5. Kabelaffe2012

    Kabelaffe2012 Neuer Benutzer

    Das ist es ja, dachte es gibt vielleichet ein Script/Idee wo/wie das zu Lösen wäre
     
  6. akretschmer

    akretschmer Datenbank-Guru

    Naja, einen Ansatz hab ich ja geliefert. Suchst Du ein Wort, bekommst die Liste der Records, in denen es vorkommt. Suchst Du N Wörter, mußt halt die Records kombinieren.
    So ganz versth ich das Nummerndingens da nicht, kommt da im Text: "Nummer Nebenstamm:" und in der nächsten Zeile dann 'ne Nummer? Darauf kann man sicherlich suchen.
    Aber wozu die gut ist weiß ich nicht.

    Na, wie dem auch sei: das wird kein einfaches Ding.

    Andreas
     
  7. ukulele

    ukulele Datenbank-Guru

    Ich würde einen kleinen SQL Batch schreiben der zu jedem Text jedes Wort einem Eintrag in einer Tabelle mit allen Wörtern zuordnet. Dann hat man am besten eine Liste mit allen Schlüsselwörtern zur Hand oder man schmeist alle nicht Schlüsselwörter manuell aus der Tabelle. Dann kann man nach vielen Übereinstimmungen suchen.

    Das ist alles sehr komplex aber ich finde mit SQL durchaus zu lösen.

    Ich hab sowas mal für mein CRM gebastelt um doppelte Unternehmensbezeichnungen die auch leicht von einander abweichen können zu erkennen. Allerdings war das sehr rechenlastig und ist glaube ich hier nicht anwendbar. Hier würde ich nur Wörter mit mehr als 4 Buchstaben indexieren und vergleichen. Kommt ein Wort sehr oft vor taugt es nicht als vergleich, kommt es nur einmal vor auch nicht. Kommt es doppelt oder mehrfach vor steigt die Warscheinlichkeit einer Dublette.
     

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden