WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Cell Array Elemente anhand einer Synonymzuweisung neu zuweis

 

Amin_München

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.12.2015, 17:19     Titel: Cell Array Elemente anhand einer Synonymzuweisung neu zuweis
  Antworten mit Zitat      
Hallo Leute,

ich habe ein Cell Array mit ca 20.000 Dokumenten und jedes Dokument stellt einen Text dar. Ich würde ganz gerne für eine Textsuche folgendes erreichen:

Ich will erst eine Synonymliste erstellen, in welcher beispielsweise steht das die Wörter
'machte','mache','gemacht'auf den Infitnitv 'machen' abbilden. Anhand dieser Synonymliste, welche der Benutzer selber eintippen kann, will ich im Nachhinein alle Dokumente durchgehen und diese Begriffe durch das Synonym neu ersetzen und letztendlich nachdem alle Dokumente durchgegangen wurden. Die Ergebnisse festhalten, indem ich ein neues Cell Array abspeichere, welches nur noch die Synonyme enthält die ich in der Synonymliste definiert habe.

Ich absolut nicht wo ich anfangen soll.... Ich habe folgendes probiert musste aber feststellen, dass es so auf keinen Fall klappt:

Code:
load('normalized-documents.mat')
docs_normalized_infinitiv={};
for i=1:21578
    for k=1:numel(docs_normalized{1,i})
        [is,were,are]=deal('be');
        [goes,went,going]=deal('go');
        [has,had,having]=deal('have');
        [does,did,doing]=deal('do');
        [can,could,able to]=deal('can');
    end
end


Ich hoffe hier kann mir jemand weiterhelfen Smile über jeden Tipp würde ich mich freuen.

LG
edit winkow: bitte code umgebung benutzen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 06.12.2015, 21:16     Titel: Re: Cell Array Elemente anhand einer Synonymzuweisung neu zu
  Antworten mit Zitat      
Hallo Amin_München,

Es fällt mir schwer Deine Frage zu verstehen.

Zitat:
ich habe ein Cell Array mit ca 20.000 Dokumenten und jedes Dokument stellt einen Text dar. Ich würde ganz gerne für eine Textsuche folgendes erreichen:

Das ist also ein Cell String, der Datei-Namen enthält, oder?

Zitat:
Ich will erst eine Synonymliste erstellen, in welcher beispielsweise steht das die Wörter 'machte','mache','gemacht'auf den Infitnitv 'machen' abbilden.

Was bedeutet genau "abbilden" hier?

Das weitere konnte ich nicht nachvollziehen. Welche Wörter sollen wodurch ersetzt werden? Was soll geschehen, wenn die Dokumente durchgegangen werden?
Zitat:

Code:
load('normalized-documents.mat')
docs_normalized_infinitiv={};
for i=1:21578

Hier wären nun Erklärungen praktisch: Was enthält das MAT-File? Welche Variablen sind darin vorhanden? Was soll in "docs_normalized_infinitiv" stehen? Wieso geht "i"i bis 21578?
Zitat:
Code:
       [is,were,are]=deal('be');

Hier werden Variablen-Namen als Daten verwendet. Das ist grundsätzlich ein schlechter Programmier-Ansatz. Daten und Programm sollten streng getrennt bleiben. Z.B.:
Code:
WordList = {'go', {'goes', 'went', 'going'}; ...
  'have', {'has', 'had', 'having'}};

Danach hilft strrep wahrscheinlich weiter. Man benötigt einer Schleife über alle File, sowie eine Schleife über alle Zilene der WordList, und schließlich noch eine über die "Unter-Listen".

Wenn das Programm schnell laufen soll, würde man dies anders organisieren. Eine alphabetische Liste der Unter-Listen beschleunigt die Suche in den Files massiv:
Code:
Replace = {'go', 'have'};
Search = {'has', 2; ...
                 'had', 2; ...
                 'having', 2; ...
                 'goes', 1; ...
                 'going', 1; ...
                 'went', 1};

Die Zahlen sind dabei die entsprechenden Indices bzgl. der "Replace"-Liste.
Wenn es sich um große Wörter-Bücher handelt (Millionen von Wörtern), wäre ein Bayer-Baum effizient (frage Wikipedia).

Gruß, Jan

Zuletzt bearbeitet von Jan S am 07.12.2015, 15:03, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Amin_München
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 07.12.15
Wohnort: München
Version: 2015b
     Beitrag Verfasst am: 07.12.2015, 10:54     Titel: Re: Cell Array Elemente anhand einer Synonymzuweisung neu zu
  Antworten mit Zitat      
Zitat:
Zitat:
ich habe ein Cell Array mit ca 20.000 Dokumenten und jedes Dokument stellt einen Text dar. Ich würde ganz gerne für eine Textsuche folgendes erreichen:

Das ist also ein Cell String, der Datei-Namen enthält, oder?

Ja es handelt sich um eine Datei, welche ein 1x21578 cell array ist und jedes dieser Elemente ist ein Cell-String. Diese Cell-Strings enthalten Nachrichtennews, sind also kurze Texte aus der Zeitung, nur so am Rande Smile.

Zitat:
Zitat:
Ich will erst eine Synonymliste erstellen, in welcher beispielsweise steht das die Wörter 'machte','mache','gemacht'auf den Infitnitv 'machen' abbilden.

Was bedeutet genau "abbilden" hier?

Mit abbilden meine ich, dass wenn in den englischen Texten die Wörter 'are,were,is' stehen, dann soll das Cell-String dahin verändert werden, dass diese Wörter durch das Synonym, welches hier der Infinitiv wäre ersetzt werden, also quasi durch 'is' ersetzen.

Zitat:
Das weitere konnte ich nicht nachvollziehen. Welche Wörter sollen wodurch ersetzt werden? Was soll geschehen, wenn die Dokumente durchgegangen werden?

Ich will mein Cell-Array bzw. sämtliche Cell-Strings auf eine Textsuche vorbereiten, und da ist es besser, wenn Begriffe, welche die selbe Bedeutung haben auf einen einheitlichen Begriff "fallen".
Zitat:
Zitat:

Code:
load('normalized-documents.mat')
docs_normalized_infinitiv={};
for i=1:21578

Hier wären nun Erklärungen praktisch: Was enthält das MAT-File? Welche Variablen sind darin vorhanden? Was soll in "docs_normalized_infinitiv" stehen? Wieso geht "i"i bis 21578?

Die eigentliche Ursprungsdatei/Datenbank ist "docs" und befindet sich im Workspace. Ich habe eine neue Datei im Ordner erstellt, welche erstmal als Vorverarbeitumgsschritt alle Cell-Strings so abändert, dass die Texte nur noch kleine Buchstaben enthalten, damit Wörter die am Anfang eines Satzes stehen bei der Suche genauso behandelt werden wie welche, die im Satz stehen, quasi eine Normalisierung. Das hat aber erstmal weniger mit meinem Problem zu tun Very Happy. Der Index i geht von 1 bis zur letzten Datei, da ich diese Synonym Ersetzung halt für jedes Cell-String umsetzen will.
Zitat:
Code:
       [is,were,are]=deal('be');


Hier wollte ich eigentlich erreichen, dass in jedem Cell String von i=1 bis zum letzten(21578) die Strings in der eckigen Klammer wie das jeweilige String in 'deal()' "gedealt bzw. behandelt" werden. Scheint wohl falsch zu sein, kann es sein, dass das gar keine Stings sind bei mir, weil es nicht in Anführungsstrichen steht oder geht das so Überhaupt nicht?
Zitat:
Hier werden Variablen-Namen als Daten verwendet. Das ist grundsätzlich ein schlechter Programmier-Ansatz. Daten und Programm sollten streng getrennt bleiben. Z.B.:
Code:
WordList = {'go', {'goes', 'went', 'going'}; ...
  'have', {'has', 'had', 'having'}};

Danach hilft strrep wahrscheinlich weiter. Man benötigt einer Schleife über alle File, sowie eine Schleife über alle Zilene der WordList, und schließlich noch eine über die "Unter-Listen".


Das hier hilft mir glaube ich schon genau weiter, ich wusste nicht dass es eine 'strrep' Funktion gibt. Ich verstehe nicht genau wie deine Wortlist funktioniert, hast du da eine Liste, welche für jedes Element der Hauptliste eine Unterliste besitzt? Ich würde ganz gerne eine Liste erstellen, welche alle meine Synonyme enthält und in welcher steht, welche Wörter auf ein Synonym 'abgebildet' werden. Angenommen ich erstelle jetzt diese Wordliste von dir für sag ich mal 20 Begriffe/cases, wie erreiche ich, dass jedes Cell String mit dieser Wordliste abgeglichen wird und dann die jeweiligen Begriffe durch das Synonym ersetzt werden?

Zitat:
Wenn das Programm schnell laufen soll, würde man dies anders organisieren. Eine alphabetische Liste der Unter-Listen beschleunigt die Suche in den Files massiv:
Code:
Replace = {'go', 'have'};
Search = {'has', 2; ...
                 'had', 2; ...
                 'having', 2; ...
                 'goes', 1; ...
                 'going', 1; ...
                 'went', 1};

Die Zahlen sind dabei die entsprechenden Indices bzgl. der "Replace"-Liste.
Wenn es sich um große Wörter-Bücher handelt (Millionen von Wörtern), wäre ein Bayer-Baum effizient (frage Wikipedia).


Hier verstehe ich leider nur Bahnhof, ist Replace/Search eine gemeinsame 'Funktion' von Matlab oder woher weiß Matlab bei Search={....} das have den Index 2 hat und go den Index 1 ?

Vielen Dank erstmal dafür, dass du dir die Zeit genommen hast, dich mit meinem Problem auseinanderzusetzen und ich hoffe du kannst mir hier weiter beistehen Smile

Sorry für meine miserablen Zitat und Forumskünste was kommentieren von Antworten angeht, aber ich benutze Foren leider noch nicht so oft :S.

LG Amin


[EDITED, Jan, Quoting und Antworten in entsprechende Blöcke sortiert]
_________________

Vielen Dank für eure Hilfe!
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.