Automatische Groß- und Kleinschreibung von Texten
-
- Beiträge: 72
- Registriert: 16.03.2006 11:20
Automatische Groß- und Kleinschreibung von Texten
Ich habe Unmengen an deutschen und englischen Buchtiteln etc. aus einer alten Datenbank, die alle in Großbuchstaben gespeichert sind. Diese sollen nun in "normale" Groß-/Kleinschreibung umgewandelt werden, damit am Ende nur noch ein paar Korrekturen notwendig sind.
Ein Ansatz wäre, eine Liste der am häufigsten verwendeten kleinzuschreibenden Wörter zu finden (der, die, das, the, ein, a, an, und, and,....), vielleicht gibt es aber eine bessere Idee?
Ein Ansatz wäre, eine Liste der am häufigsten verwendeten kleinzuschreibenden Wörter zu finden (der, die, das, the, ein, a, an, und, and,....), vielleicht gibt es aber eine bessere Idee?
- NicTheQuick
- Ein Admin
- Beiträge: 8807
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Automatische Groß- und Kleinschreibung von Texten
Wenn du unterscheiden kannst, ob es Englisch oder Deutsch ist, wäre Englisch schon mal am einfachsten, da dort alles klein geschrieben wird, solange es kein Eigenname ist. Ansonsten würde ich behaupten, dass die Lösung mit eine Wortliste wohl am einfachsten und schnellsten zu implementieren ist, sodass du am Ende tatsächlich nur noch sehr wenige Korrekturen machen musst.
Unter Linux findest du Wortlisten meist auch vorinstalliert, z.B. habe ich eine Liste mit deutschen Wörtern in /usr/share/dict/ngerman mit 356008 Wörtern. Daneben gibt es auch die Dateien 'american-english' und 'british-english' für die englischen Wörter. Du solltest solche Wortlisten auch auf Github und Co finden können. Ein bisschen Googeln sollte schon helfen.
Du kannst dir auch ganze Dictionaries für den privaten Gebrauch laden: https://www1.dict.cc/translation_file_request.php?l=e
Oder Grundwortlisten: https://www1.ids-mannheim.de/kl/projekt ... erewo.html
Unter Linux findest du Wortlisten meist auch vorinstalliert, z.B. habe ich eine Liste mit deutschen Wörtern in /usr/share/dict/ngerman mit 356008 Wörtern. Daneben gibt es auch die Dateien 'american-english' und 'british-english' für die englischen Wörter. Du solltest solche Wortlisten auch auf Github und Co finden können. Ein bisschen Googeln sollte schon helfen.
Du kannst dir auch ganze Dictionaries für den privaten Gebrauch laden: https://www1.dict.cc/translation_file_request.php?l=e
Oder Grundwortlisten: https://www1.ids-mannheim.de/kl/projekt ... erewo.html
Re: Automatische Groß- und Kleinschreibung von Texten
Da wirst du um einen Vergleich mit einem Wörterbuch nicht drum rum kommen.
Signatur und so
-
- Beiträge: 68
- Registriert: 26.04.2019 10:31
- Computerausstattung: Lenovo W500, Debian Stable, Purebasic 5.70 (momentan die Testversion)
- Wohnort: Mühldorf am Inn
Re: Automatische Groß- und Kleinschreibung von Texten
Auf der Linux Shell geht das so:
echo $string | tr '[:upper:]' '[:lower:]'
oder
echo $String | tr "[A-Z]" "[a-z]"
und mit sed
echo $foo | sed 's/./\u&/' (bzw \U für Grossbuchstaben)
Schöne Grüsse
Kurt
echo $string | tr '[:upper:]' '[:lower:]'
oder
echo $String | tr "[A-Z]" "[a-z]"
und mit sed
echo $foo | sed 's/./\u&/' (bzw \U für Grossbuchstaben)
Schöne Grüsse
Kurt
Wenn einem die einfachen Dinge net einfallen, klappt's meistens umständlich...
- NicTheQuick
- Ein Admin
- Beiträge: 8807
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Automatische Groß- und Kleinschreibung von Texten
@Kurt: Das, hat aber weder mit Purebasic, noch mit der Lösung des Problems zu tun. Er will ja nicht einfach alles groß oder klein schreiben.
- PureLust
- Beiträge: 1145
- Registriert: 21.07.2005 00:02
- Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
- Wohnort: am schönen Niederrhein
Re: Automatische Groß- und Kleinschreibung von Texten
Hallo Michael,
Ich hab mir gedacht, wenn Du schon Buchtitel umwandeln willst - warum dazu nicht den Buchtitel auf einer der Internet-Plattformen suchen und das Ergebnis mit Deinem Buchtitel abgleichen.
Ist also nicht unbedingt eine universelle Lösung für korrekte Groß-/Kleinschreibung, aber für Buchtitel ja vielleicht ganz gut geeignet.
Für die Demo wird eine Bücher-Liste aus dem Internet herunter geladen und die Buchtitel in die Liste Buecher() eingetragen.
Hier müsstet Du statt dessen also Deine Titel einpflegen.
Über die globale Variable Check_Result kannst Du abfragen, ob Dein Buchtitel zu 100% gefunden (#Check_OK) wurde, oder ob statt dessen ein Alternativ-Titel zurück gegeben wurde (#Check_AlternativeTitle).
Hoffe Du kannst was damit anfangen.
Ich hab mir gedacht, wenn Du schon Buchtitel umwandeln willst - warum dazu nicht den Buchtitel auf einer der Internet-Plattformen suchen und das Ergebnis mit Deinem Buchtitel abgleichen.
Ist also nicht unbedingt eine universelle Lösung für korrekte Groß-/Kleinschreibung, aber für Buchtitel ja vielleicht ganz gut geeignet.

Code: Alles auswählen
EnableExplicit
InitNetwork()
Global Check_Result, Check_AlternativeTitle$
#Q = Chr(34) ; Anführungszeichen / Chicken Shit
#Check_NoEntry = -1
#Check_ERROR = 0
#Check_OK = 1
#Check_AlternativeTitle = 2
#SearchEngine_Amazon = 1
#SearchEngine_Google = 2
#SearchEngine_Thalia = 3
Global NewList Buecher.s()
Global SearchEngine = #SearchEngine_Thalia
Procedure.s HTML2Text(Text$, AuchZeilenumbrueche = #False) ; converts all HTML-Codes for German Umlaute into ASCii
Text$ = ReplaceString(Text$, "ä", "ä")
Text$ = ReplaceString(Text$, "ö", "ö")
Text$ = ReplaceString(Text$, "ü", "ü")
Text$ = ReplaceString(Text$, "Ä", "Ä")
Text$ = ReplaceString(Text$, "Ö", "Ö")
Text$ = ReplaceString(Text$, "Ü", "Ü")
Text$ = ReplaceString(Text$, "ß","ß")
Text$ = ReplaceString(Text$, "€", "€")
Text$ = ReplaceString(Text$, "“", "'")
Text$ = ReplaceString(Text$, "”", "'")
Text$ = ReplaceString(Text$, "&", "&")
If AuchZeilenumbrueche
Text$ = ReplaceString(Text$, " ", Chr(160))
Text$ = ReplaceString(Text$, "²", Chr(178))
Text$ = ReplaceString(Text$, "<br />", #CR$)
Text$ = ReplaceString(Text$, "</br>", #CR$)
Text$ = ReplaceString(Text$, "<br>", #CR$)
EndIf
ProcedureReturn Text$
EndProcedure
Procedure LoadBookTitles() ; Hier wird als Beispiel eine CSV-Liste mit Büchertiteln aus dem Web geladen (Quelle: https://antolin.westermann.de/all/info/titel-listen.jsp )
Protected ActBook.s, LastBook.s, myBookList.s = GetTemporaryDirectory()+"myBookList.csv"
If FileSize(myBookList) < 1 ; Prüfen, ob Bücherliste ggfl. bereits heruntergeladen wurde (Read Only once, to minimize Traffic)
ReceiveHTTPFile("https://antolin.westermann.de/all/downloads/antolingesamt-utf8.csv", myBookList)
EndIf
If ReadFile(0, myBookList, #PB_UTF8)
ReadString(0) ; ignoriere erste Zeile (enthält nur Spaltentitel)
While Not Eof(0)
ActBook = ReadString(0)
ActBook = UCase(StringField(ActBook,2,#Q+";"+#Q)) ; Buchtitel filtern und in Gro0buchstaben umwandeln, um vorher/nachher Vergleich zu haben
If ActBook <> LastBook
AddElement(Buecher())
Buecher() = ActBook
LastBook = Buecher()
EndIf
Wend
CloseFile(0)
Else
Debug "Keine Bücherliste gefunden"
End
EndIf
EndProcedure
Procedure.s CheckProduktName(ProduktName.s)
Protected *Buffer, Search.s, Pos, Result.s, HTML.s
Check_Result = #Check_ERROR
Search = ReplaceString(ProduktName, " ", "+") ; Alle Leerzeichen durch "+" ersetzen, für Amazon-Suche
If SearchEngine = #SearchEngine_Amazon ;--------------------- Search per Amazon ------------------------------
; removed
ElseIf SearchEngine = #SearchEngine_Google ;-------------------- Google Suche -----------------------------------------
; removed
ElseIf SearchEngine = #SearchEngine_Thalia ;-------------------- Thalia Suche -----------------------------------------
Search = ReplaceString(Search, #Q, "")
Search = ReplaceString(Search, "++", "+")
Search = ReplaceString(Search, "ä", "ae",#PB_String_NoCase)
Search = ReplaceString(Search, "ö", "oe",#PB_String_NoCase)
Search = ReplaceString(Search, "ü", "ue",#PB_String_NoCase)
Search = ReplaceString(Search, "Ä", "AE",#PB_String_NoCase)
Search = ReplaceString(Search, "Ö", "OE",#PB_String_NoCase)
Search = ReplaceString(Search, "Ü", "UE",#PB_String_NoCase)
Search = ReplaceString(Search, "ß", "ss",#PB_String_NoCase)
*Buffer = ReceiveHTTPMemory("https://www.thalia.de/suche?filterPATHROOT=&sq="+Search)
Repeat ; Dummy-Repeat um eine definierte Exit-Möglichkeit zu haben
If *Buffer
HTML.s = HTML2Text(PeekS(*Buffer, MemorySize(*Buffer), #PB_UTF8|#PB_ByteLength)) ; Suchergebis von Talia Webseite abrufen
FreeMemory(*Buffer)
Else
Break
EndIf
Pos = FindString(HTML, "<div class="+#Q+"productList socs_product_list"+#Q,1,#PB_String_NoCase) ; Position des Suchtextes einschränken um ungewollte Einträge auszuschließen
Pos = FindString(HTML, "<div class="+#Q,Pos+100,#PB_String_NoCase)
Pos = FindString(HTML, ProduktName, Pos, #PB_String_NoCase)
If Pos > 0 And Pos < FindString(HTML,"<div class="+#Q+"socs_paginierung"+#Q+">")
Result = Mid(HTML, FindString(HTML, ProduktName, Pos, #PB_String_NoCase), Len(ProduktName))
Check_Result = #Check_OK
EndIf
; Erstes Suchergebnis filtern und als alternatives Ergebnis anbieten
Define HTML_Tag.s = StringField(HTML, 2, "<div class="+#Q+"productList socs_product_list"+#Q)
HTML_Tag.s = StringField(HTML_Tag, 2, "title="+#Q)
HTML_Tag.s = StringField(HTML_Tag, 1, #Q)
Check_AlternativeTitle$ = HTML_Tag
If Len(Check_AlternativeTitle$) > 0 And Check_Result = #Check_ERROR
Result = Check_AlternativeTitle$ ; Wenn der exakte Titel zuvor nicht gefunden wurde, gebe alternativtitel zurück und setze Flag
Check_Result = #Check_AlternativeTitle
EndIf
Until #True ; Ende des Dummy-Repeat
If Check_Result = #Check_ERROR And FindString(HTML, "keine Treffer")
Check_Result = #Check_NoEntry
EndIf
EndIf
If Check_Result = #Check_ERROR : Debug "Fehler bei Suche nach: "+Search : EndIf
If Check_Result = #Check_NoEntry : Debug "Kein Eintrag gefunden zu: "+ProduktName : EndIf
ProcedureReturn Result
EndProcedure
AddElement(Buecher())
Buecher() = "Das Herz der Nation"
LoadBookTitles()
Define BookName.s, Row.s, Quit
OpenWindow(0,0,0,960,400,"Büchersuche per Amazon", #PB_Window_ScreenCentered | #PB_Window_SystemMenu)
ListIconGadget(0,0,0,960,400,"Such-Name", 300)
AddGadgetColumn(0,1,"Status",55)
AddGadgetColumn(0,2,"korigierter Name",200)
AddGadgetColumn(0,3,"alternativer Buchtitel",390)
SelectElement(Buecher(), 3975) ; Mit irgendeinem Buch anfangen
AddWindowTimer(0,0,2000)
Repeat
Select WaitWindowEvent()
Case #PB_Event_Timer
RemoveWindowTimer(0,0)
BookName.s = CheckProduktName(Buecher()) ; Suchanfrage für ein Buch starten
If Check_Result = #Check_OK ; Ergenis prüfen - #Check_OK bedeutet, der exakte Buchname wurde gefunden
AddGadgetItem(0,#PB_Any,Buecher() + #LF$ + row + "ok" + #LF$ + BookName + #LF$ + Check_AlternativeTitle$)
ElseIf Check_Result = #Check_AlternativeTitle ; #Check_AlternativeTitle bedeutet, das der exakte Name nicht gefunden werden konnte und statt dessen der erste angebotene Buchtitel zurückgegeben wurde.
AddGadgetItem(0,#PB_Any,Buecher() + #LF$ + row + "alternativ" + #LF$ + #LF$ + Check_AlternativeTitle$)
EndIf
If NextElement(Buecher()) And CountGadgetItems(0) < 40 ; Nächsten Abruf mit hilfe eines Timer-Events einleiten
AddWindowTimer(0,0,100)
EndIf
Case #PB_Event_CloseWindow
Quit = #True
EndSelect
Until Quit
Hier müsstet Du statt dessen also Deine Titel einpflegen.
Über die globale Variable Check_Result kannst Du abfragen, ob Dein Buchtitel zu 100% gefunden (#Check_OK) wurde, oder ob statt dessen ein Alternativ-Titel zurück gegeben wurde (#Check_AlternativeTitle).
Hoffe Du kannst was damit anfangen.

[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
-
- Beiträge: 72
- Registriert: 16.03.2006 11:20
Re: Automatische Groß- und Kleinschreibung von Texten
Hey, danke für euren Input, mein Ziel ist jedenfalls eine (einigermaßen treffsichere) Offline-Lösung (auch wenn der Internetcheck für aktuelle Buchtitel schon sehr elegant ist).
Ganz so streng nehme ich es ohnehin nicht, zumal bei englischen (Lied-)Titeln auch viele Wörter groß geschrieben werden (https://grammar.yourdictionary.com/capi ... songs.html)...
Vielleicht reichen rund 100 Wörter pro Sprache, um ganz gute Ergebnisse zu liefern. Allein, ich habe bis jetzt nirgends eine Liste der am Häufigsten verwendeten Wörter gefunden...
Ganz so streng nehme ich es ohnehin nicht, zumal bei englischen (Lied-)Titeln auch viele Wörter groß geschrieben werden (https://grammar.yourdictionary.com/capi ... songs.html)...
Vielleicht reichen rund 100 Wörter pro Sprache, um ganz gute Ergebnisse zu liefern. Allein, ich habe bis jetzt nirgends eine Liste der am Häufigsten verwendeten Wörter gefunden...
- PureLust
- Beiträge: 1145
- Registriert: 21.07.2005 00:02
- Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
- Wohnort: am schönen Niederrhein
Re: Automatische Groß- und Kleinschreibung von Texten
Vielleicht kannst Du ja auch einfach die Bücher-Liste (die ich in meinem DemoCode herunter lade) als Referenz nehmen (Quelle).Michael Vogel hat geschrieben:Allein, ich habe bis jetzt nirgends eine Liste der am Häufigsten verwendeten Wörter gefunden...
Hier sind ja rund 96.000 Buchtitel drin - somit solltest Du also jede Menge Wörter zum vergleichen haben.
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
- NicTheQuick
- Ein Admin
- Beiträge: 8807
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Automatische Groß- und Kleinschreibung von Texten
Dann hast du nicht richtig gesucht. Bei mir war es nämlich der erste Treffer:Michael Vogel hat geschrieben:Vielleicht reichen rund 100 Wörter pro Sprache, um ganz gute Ergebnisse zu liefern. Allein, ich habe bis jetzt nirgends eine Liste der am Häufigsten verwendeten Wörter gefunden...
Deutsch: http://www.languagedaily.com/learn-germ ... rman-words
Englisch: https://1000mostcommonwords.com/1000-mo ... ish-words/