EnglischFranzösischSpanisch

Ad


OnWorks-Favicon

sim_text – Online in der Cloud

Führen Sie sim_text im kostenlosen Hosting-Anbieter OnWorks über Ubuntu Online, Fedora Online, den Windows-Online-Emulator oder den MAC OS-Online-Emulator aus

Dies ist der Befehl sim_text, der beim kostenlosen Hosting-Anbieter OnWorks mit einer unserer zahlreichen kostenlosen Online-Workstations wie Ubuntu Online, Fedora Online, dem Windows-Online-Emulator oder dem MAC OS-Online-Emulator ausgeführt werden kann

PROGRAMM:

NAME/FUNKTION


sim - Ähnlichkeiten in C, Java, Pascal, Modula-2, Lisp, Miranda oder Textdateien finden

ZUSAMMENFASSUNG


sim_c [ -[defFiMnpPRsSTv] -r N -t N -w N -o F ] Datei ... [ [ / | ] Datei ... ]
sim_c ...
sim_java ...
sim_pasc ...
sim_m2 ...
sim_lisp ...
sim_mira ...
sim_text ...

BESCHREIBUNG


Sim_c liest die C-Dateien Datei ... und sucht nach ähnlichen Textsegmenten; zwei
Programmtextabschnitte sind ähnlich, wenn sie sich nur in Layout, Kommentar, Bezeichnern,
und der Inhalt von Zahlen, Zeichenfolgen und Zeichen. Wenn Strecken von ausreichender Länge sind
gefunden, werden sie in der Standardausgabe ausgegeben; die Anzahl der signifikanten Token im Lauf
wird zwischen eckigen Klammern angegeben.

Sim_java macht dasselbe für Java, sim_pasc für Pascal, sim_m2 für Modula-2, sim_mira für
Miranda und sim_lisp für Lisp. Sim_text funktioniert mit beliebigem Text und es ist gelegentlich
nützlich bei Shell-Skripten.

Das Programm kann verwendet werden, um kopierte Codestücke in angeblich nicht zusammenhängenden Dateien zu finden
Programme (mit -s or -S) oder um versehentlich doppelten Code in größeren Projekten zu finden
(mit -f or -F).

Wenn ein Trennzeichen / or | in der Liste der Eingabedateien vorhanden ist, werden die Dateien unterteilt in a
Gruppe von "neuen" Dateien (vor der / or |) und eine Gruppe von "alten" Dateien; wenn es keine gibt / or
|, alle Dateien sind "neu". Alte Dateien werden nie miteinander verglichen. Siehe auch die
Beschreibung des -s und -S Optionen unten.

Da der Ähnlichkeitstester Dateinamen benötigt, um die Ähnlichkeiten festzustellen, kann er nicht lesen
von der Standardeingabe.

Es gibt folgende Möglichkeiten:

-d Die Ausgabe ist in a diff(1)-ähnliches Format anstelle des standardmäßigen 2-Spalten-Formats.

-e Jede Datei wird isoliert mit jeder Datei verglichen; das wird alle Ähnlichkeiten finden
zwischen allen beteiligten Texten, unabhängig von sich wiederholendem Text (siehe `Berechnen
Prozentsätze unten).

-f Durchläufe sind auf Segmente mit ausgleichenden Klammern beschränkt, um Potenziale zu isolieren
Routineorgane (nicht in sim_text).

-F Die Namen von Routinen in Aufrufen müssen genau übereinstimmen (nicht in sim_text).

-i Die Namen der zu vergleichenden Dateien werden aus der Standardeingabe gelesen, einschließlich a
mögliches Trennzeichen / or |; die Dateinamen müssen eins zu einer Zeile sein. Diese Option
ermöglicht die Angabe einer sehr großen Anzahl von Dateinamen; es unterscheidet sich vom @
Möglichkeit, die von einigen Compilern bereitgestellt wird, da sie nur Dateinamen verarbeitet und
Optionsargumente nicht erkennen.

-M Informationen zur Speichernutzung werden in der Standardfehlerausgabe angezeigt.

-n Gefundene Ähnlichkeiten werden nach Dateiname, Position und Größe zusammengefasst, anstatt
vollständig angezeigt.

-o F Die Ausgabe wird in die Datei namens . geschrieben F.

-p Die Ausgabe wird in Ähnlichkeitsprozentsätzen angegeben; siehe `Prozentsätze berechnen' unten;
impliziert -e und -s.

-P As -p aber nur der Hauptbeitragende wird angezeigt; impliziert -e und -s.

-r N Die Mindestlauflänge ist auf eingestellt N Einheiten; der Standardwert ist 24 Token, außer in
sim_text, wobei es 8 Wörter sind.

-R Verzeichnisse in der Eingabeliste werden rekursiv eingetragen und alle darin enthaltenen Dateien
sind am Vergleich beteiligt.

-s Der Inhalt einer Datei wird nicht mit sich selbst verglichen (-s für "nicht selbst").

-S Der Inhalt der neuen Dateien wird nur mit den alten Dateien verglichen - nicht zwischen
sich.

-t N In Kombination mit dem -p or -P Optionen, setzt den Schwellenwert (in Prozent) unter
welche Ähnlichkeiten werden nicht gemeldet; der Standardwert ist 1, außer in sim_text,
wo es 20 ist.

-T Es entsteht eine knappere und einheitlichere Form der Ausgabe, die möglicherweise besser geeignet ist für
Nachbearbeitung.

-v Druckt die Versionsnummer und das Kompilierungsdatum auf der Standardausgabe und stoppt dann.

-w N Die verwendete Seitenbreite ist eingestellt auf N Säulen; der Standardwert ist 80.

-- (Eine geheime Option, die die Eingabe so ausgibt, wie die Ähnlichkeitsprüfung sie sieht, und
hört dann auf.)

Das -p Option führt zu Zeilen der Form
F besteht zu x % aus G-Material
Dies bedeutet, dass x % des Textes von F auch in G zu finden sind. Beachten Sie, dass diese Beziehung nicht
symmetrisch; es ist durchaus möglich, dass eine Datei zu 100 % aus Text besteht aus
eine andere Datei, während die andere Datei nur aus 1 % des Textes der ersten Datei besteht, wenn
ihre Längen unterscheiden sich genug. Die -P (Kapital P) Option zeigt den Hauptbeitragenden für
nur jede Datei. Dies vereinfacht die Identifizierung einer Menge von Dateien A[1] ... A[n], wobei
die Verkettung dieser Dateien ist ebenfalls vorhanden. Mit dem kann ein Schwellwert eingestellt werden -t
Möglichkeit; Beachten Sie, dass die Granularität des erkannten Textes immer noch von den -r
Option oder deren Vorgabe.

Das -r Option steuert die Anzahl der "Einheiten", die einen Lauf bilden. Für die Programme, die
vergleiche den Programmiersprachencode, eine Einheit ist ein lexikalisches Token in der entsprechenden Sprache;
Kommentar und Standard-Präambelmaterial (Dateieinbindung usw.) werden ignoriert und alle Zeichenfolgen
gelten als gleich. Zum sim_text eine Einheit ist ein "Wort", das als eine beliebige Folge definiert ist
aus einem oder mehreren Buchstaben, Ziffern oder Zeichen über 127 (177 Oktal), (um
Buchstaben wie ä, ø usw.).
Sim_text akzeptiert spacedtext als normalen Text.

Das -s und -S Optionen steuern, welche Dateien verglichen werden sollen. Eingabedateien sind zweigeteilt
Gruppen, neu und alt. Fehlen diese Kontrollmöglichkeiten, vergleichen die Programme die
Dateien also (für 4 neue Dateien und 6 alte):
neu / alt <- erste Datei
1 2 3 4 / 5 6 7 8 9 10
|------------/------------
n 1 | C /
e 2 | cc /
w 3 | ccc /
4 | cccc /
Sekunde / / / / / / / / / / / / /
Datei -> 5 | cccc /
o 6 | cccc /
l 7 | cccc /
d 8 | cccc /
9 | cccc /
10 | cccc /
wobei die cs Dateivergleiche darstellen und die / die Abgrenzung zwischen neu und alt
Dateien.
Verwendung der -s Option reduziert dies auf:
neu / alt <- erste Datei
1 2 3 4 / 5 6 7 8 9 10
|------------/------------
n 1 | /
e 2 | C /
w 3 | cc /
4 | ccc /
Sekunde / / / / / / / / / / / / /
Datei -> 5 | cccc /
o 6 | cccc /
l 7 | cccc /
d 8 | cccc /
9 | cccc /
10 | cccc /
Das -S Option reduziert dies weiter auf:
neu / alt <- erste Datei
1 2 3 4 / 5 6 7 8 9 10
|------------/------------
n 1 | /
e 2 | /
w 3 | /
4 | /
Sekunde / / / / / / / / / / / / /
Datei -> 5 | cccc /
o 6 | cccc /
l 7 | cccc /
d 8 | cccc /
9 | cccc /
10 | cccc /

Die Programme können unter Windows mit UNICODE-Dateinamen umgehen. Dies ist nur relevant unter der
-R Option, da es keine Möglichkeit gibt, UNICODE-Dateinamen über die Befehlszeile zu vergeben.

EINSCHRÄNKUNGEN


Wiederholte Eingaben sind der Fluch der Ähnlichkeitsprüfung. Wenn wir eine Datei mit 4 . haben
Kopien identischer Texte,
A1 A2 A3 A4
wo die Nummern nur zur Unterscheidung der identischen Kopien dienen, gibt es 8 Identitäten:
A1=A2, A1=A3, A1=A4, A2=A3, A2=A4, A3=A4, A1A2=A3A4 und A1A2A3=A2A3A4. Davon nur 3
sind sinnvoll: A1=A2, A2=A3 und A3=A4. Und für eine Tabelle mit 20 identischen Zeilen
andere, in einem Programm nicht ungewöhnlich, es gibt 715 Identitäten, davon höchstens 19
sinnvoll. Es ist eindeutig inakzeptabel, alle 715 von ihnen zu melden.

Um dies zu beheben, wird das Auffinden der Identitäten wie folgt durchgeführt: Für jede Position im
Text wird das größte Segment gefunden, von dem eine nicht überlappende Kopie im Text vorkommt
folgt ihm. Dieses Segment und seine Kopie werden gemeldet und der Scanvorgang wird an der Position fortgesetzt
kurz nach dem Segment. Für das obige Beispiel ergibt dies die Identitäten A1A2=A3A4
und A3=A4, was durchaus zufriedenstellend ist, und für N ungefähr identische Segmente 2 Log N
Nachrichten gegeben werden.

Dies funktioniert auch gut, wenn sich die vier identischen Segmente in verschiedenen Dateien befinden:
Datei1: A1
Datei2: A2
Datei3: A3
Datei4: A4
Nun treten keine kombinierten Segmente wie A1A2 auf, und der Algorithmus findet die Läufe A1=A2,
A2=A3 und A3=A4, insgesamt N-1 läuft, alles informativ.

Berechnung Die Prozentsätze
Der obige Ansatz ist nicht geeignet, um den Prozentsatz des Inhalts einer Datei zu ermitteln, der
finden Sie in einer anderen Datei. Dies erfordert einen isolierten Vergleich jedes Dateipaars
dargestellt durch ac in den obigen Matrizen; das ist was -e Option tut. Unter dem -e
Option ein Segment File1:A1, das in File2 erkannt wird, wird wieder in File3 erkannt und
Datei4. Im obigen Beispiel erzeugt es die Läufe
Datei1:A1=Datei2:A2
Datei1:A1=Datei3:A3
Datei1:A1=Datei4:A4
Datei2:A2=Datei3:A3
Datei2:A2=Datei4:A4
Datei3:A3=Datei4:A4
für insgesamt ½N(N-1) läuft.

ZEIT- UND SPACE VORAUSSETZUNGEN


Es wurde darauf geachtet, den Zeitbedarf aller internen Prozesse (fast) einzuhalten
linear in den Längen der Eingabedateien durch Verwendung verschiedener Tabellen. Wenn es jedoch
nicht genügend Speicher für die Tabellen, sie werden in der Reihenfolge ihrer Unwichtigkeit verworfen, unter der
Bedingungen kehren die Algorithmen zu ihrer quadratischen Natur zurück.

Der Zeitbedarf ist quadratisch in der Anzahl der Dateien. Dies bedeutet, dass zum Beispiel
eine 64-MB-Datei verarbeitet viel schneller als 8000 8-kB-Dateien.

Das Programm benötigt 6 Byte Speicher für jedes Token in der Eingabe; 2 Byte pro Zeilenumbruch
(nicht bei Prozentangaben); und ungefähr 76 Byte für jeden gefundenen Lauf.

Beispiele:


Der Anruf
sim_c *.c
hebt doppelten Code im Verzeichnis hervor. (Es ist nützlich, generierte Dateien zu entfernen
zuerst.) Ein Anruf
sim_c -f -F *.c
kann sie weiter lokalisieren.

Ein Anruf
sim_text -e -p -s neu/* / alt/*
vergleicht jede Datei in new/* mit jeder Datei in new/* und old/*, und falls ein Paar mehr hat
20% gemeinsam, diese Tatsache wird berichtet. Normalerweise ist eine Ähnlichkeit von 30% oder mehr signifikant;
weniger als 20 % ist wahrscheinlich Zufall; und dazwischen ist zweifelhaft.

Ein Anruf
sim_text -e -n -s -r100 neu/* "|" alt/*
vergleicht dieselben Dateien und meldet große gemeinsame Segmente. (Die | kann als verwendet werden
Trennzeichen statt / auf Systemen, bei denen die / als Befehlszeilenparameter wird verstümmelt von
der Befehlsinterpreter.)

Beide Ansätze eignen sich gut zur Plagiatserkennung.

Verwenden Sie sim_text online über die Dienste von onworks.net


Kostenlose Server & Workstations

Laden Sie Windows- und Linux-Apps herunter

Linux-Befehle

Ad