weidawackeln
Ohne viel Worte
]
add Gumbo
add HTTP
using Cascadia
using Gumbo
using HTTP
using DataFrames
url = "https://www.ebay-kleinanzeigen.de/s-heimarbeit-mini-nebenjobs/51545/c107l1538r20"
res = HTTP.get(url);
body = String(res.body);
html = parsehtml(body);
qres = eachmatch(sel"h2", html.root);
qres = eachmatch(Selector("div p"),html.root)
qres = eachmatch(Selector("p[title]"),html.root)
qres = eachmatch(Selector("a"),html.root)
qres = eachmatch(Selector("p"),html.root)
qres = eachmatch(Selector(""ellipsis""),html.root)
qres = eachmatch(Selector("p"),html.root)
for elem in qres
println(elem)
end
funde = []
for elem in qres
println(replace(string(elem), r"<p>|</p>|<p [^>]*>|<span.*span>" => s""))
end
qres = eachmatch(Selector("a"),html.root)
funde = []
for elem in qres
fund = (replace(string(elem), r"<p>|</p>|<p [^>]*>|<span.*span>" => s""))
m = match(r"ellipsis",fund)
if m === nothing
println("Isch lall nur Hällow äggänn...!")
else
push!(funde,fund)
end
end
funde
# Nächstes Projekt
r = HTTP.get(url);
data = String(r.body);
data[match(r"<a>", data)]
Teilergebnis
Isch lall nur Hällow äggänn...!Isch lall nur Hällow äggänn...!
Isch lall nur Hällow äggänn...!
Isch lall nur Hällow äggänn...!
Isch lall nur Hällow äggänn...!
julia> funde
25-element Array{Any,1}:
"<a class=\"ellipsis\"href=\"/s-anzeige/suche-auhilfe-in-der-gartenpflege-m-w/1209859738-107-18545\">suche Auhilfe in der Gartenpflege m/w</a>"
"<a class=\"ellipsis\"href=\"/s-anzeige/sauberes-haus/1209847619-107-1520\">Sauberes Haus</a>"
"<a class=\"ellipsis\"href=\"/s-anzeige/fleissiger-student-sucht-arbeit/1209783985-107-1497\">Fleißiger Student sucht Arbeit</a>"
"<a class=\"ellipsis\"href=\"/s-anzeige/reinigungskraft-m-w-d-auf-minijob-basis-in-much/1209693565-107-1674\">Reinigungskraft (m/w/d) auf Minijob-Basis in Much</a>"
"<a name=\"1209684705\"class=\"ellipsis\"href=\"/s-anzeige/automatenaufsteller-kneipe-imbiss-shisha-bar-bistro-caf-kiosk/1209684705-107-1887\">Automatenaufsteller Kneipe Imbiss Shisha Bar Bistro Café Kiosk</a>"
"<a name=\"1209646203\"class=\"ellipsis\"href=\"/s-anzeige/hobbyhandwerker/1209646203-107-1542\">Hobbyhandwerker</a>"
"<a name=\"1209631596\"class=\"ellipsis\"href=\"/s-anzeige/sportfachverkaeufer-in-aushilfe/1209631596-107-1538\">Sportfachverkäufer/in Aushilfe</a>"
"<a name=\"1209580207\"class=\"ellipsis\"href=\"/s-anzeige/reinigungskraft-m-w-auf-minijob-basis/1209580207-107-1514\">Reinigungskraft (m/w) auf Minijob-Basis</a>"
"<a name=\"1209498747\"class=\"ellipsis\"href=\"/s-anzeige/suche-nebenjob-450-euro/1209498747-107-10528\">Suche Nebenjob 450 euro</a>"
⋮
"<a name=\"1209213504\"class=\"ellipsis\"href=\"/s-anzeige/friseur-in-gesucht-teilzeit/1209213504-107-1538\">Friseur/in gesucht Teilzeit</a>"
"<a name=\"1209202052\"class=\"ellipsis\"href=\"/s-anzeige/reinigungskraft-auf-450-basis-gesucht-naehe-steinenbrueck/1209202052-107-1886\">Reinigungskraft auf 450,-€ Basis gesucht nähe Steinenbrück</a>"
"<a name=\"1209178212\"class=\"ellipsis\"href=\"/s-anzeige/babysitter-in-den-abendstunden-unter-der-woche-oder-am-wochenende/1209178212-107-1526\">Babysitter in den Abendstunden unter der Woche oder am Wochenende</a>"
"<a name=\"1209121660\"class=\"ellipsis\"href=\"/s-anzeige/gas-wasser-instalateur/1209121660-107-1887\">Gas Wasser Instalateur</a>"
"<a name=\"1146905810\"class=\"ellipsis\"href=\"/s-anzeige/nachhilfelehrer-fuer-deutsch-mathematik-englisch-franzoesisch-ges-/1146905810-107-1886\">Nachhilfelehrer für Deutsch Mathematik Englisch Französisch ges.</a>"
"<a name=\"1209109981\"class=\"ellipsis\"href=\"/s-anzeige/suche-arbeiter-fuer-gastronomie/1209109981-107-1538\">Suche Arbeiter für gastronomie</a>"
"<a name=\"1146855863\"class=\"ellipsis\"href=\"/s-anzeige/nachhilfelehrer-fuer-deutsch-mathematik-englisch-franzoesisch-ges-/1146855863-107-1514\">Nachhilfelehrer für Deutsch Mathematik Englisch Französisch ges.</a>"
"<a name=\"1146898672\"class=\"ellipsis\"href=\"/s-anzeige/nachhilfelehrer-fuer-deutsch-mathematik-englisch-franzoesisch-ges-/1146898672-107-1538\">Nachhilfelehrer für Deutsch Mathematik Englisch Französisch ges.</a>"
"<a name=\"1146905185\"class=\"ellipsis\"href=\"/s-anzeige/nachhilfelehrer-fuer-deutsch-mathematik-englisch-franzoesisch-ges-/1146905185-107-1461\">Nachhilfelehrer für Deutsch Mathematik Englisch Französisch ges.</a>"
Und gestern dran versucht
Natural Language Processing In Julia (Text Analysis) – JCharisTechusing Pkg
Pkg.add("TextAnalysis")
Pkg.clone("WordTokenizers")
Pkg.add("WordTokenizers")
Pkg.add("PyCall") # Helps us to use Python Packages
Pkg.add("Conda") # Helps us to use conda(Anaconda) to download Python Packages simply
using TextAnalysis
mystr = """The best error message is the one that never shows up.
You Learn More From Failure Than From Success.
The purpose of software engineering is to control complexity, not to create it"""
# Basic Way
sd1 = Document(mystr)
# Best Way
sd2 = StringDocument(mystr)
# Reading from a file
filepath = "/home/heide/Dropbox/Julia-Einstieg/Text-Analysis/efe.txt"
# Basic Way
filedoc = Document("/home/heide/Dropbox/Julia-Einstieg/Text-Analysis/efe.txt")
# Best Way
fd = FileDocument("/home/heide/Dropbox/Julia-Einstieg/Text-Analysis/efe.txt")
# Working With Our Document
text(sd1)
# Getting the Base Info About it
language(sd1)
language(filepath)
language(filedoc)
language(fd)
sd3 = text(fd)
language(sd3)
# Word Tokens from a String Document
tokens(sd1)
tokens(sd3)
text(fd)
# Word Tokens from a File Document
tokens(fd)
using WordTokenizers
# Must convert from TextAnalysis Type to String Type
tokenize(text(sd1))
tokenize(text(fd))
tokenize("Hello world this is Julia")
# Read a file with sentences
sent_files = FileDocument("/home/heide/Dropbox/Julia-Einstieg/Text-Analysis/efe.txt")
for sentence in split_sentences(text(sent_files))
println(sentence)
end
for sentence in split_sentences(text(sent_files))
wordtokens = tokenize(sentence)
println("Word token=> $wordtokens")
end
# N-Grams
mystr
sd3 = StringDocument(mystr)
# Unigram
ngrams(sd3)
# Bigrams
ngrams(sd3,2)
# Trigram
ngrams(sd3,3)
for trigram in ngrams(sd3,3)
println(trigram)
end
# Creating an NGram
my_ngrams = Dict{String, Int}("To" => 1, "be" => 2,
"or" => 1, "not" => 1,
"to" => 1, "be..." => 1)
ngd = NGramDocument(my_ngrams)
# Detecting Which NGram it is
ngram_complexity(ngd)
my_ngrams2 = Dict{AbstractString,Int64}(
"that never" => 1,"is to" => 1,"create" => 1,"that" => 1,"best" => 1,"Than From" => 1,"shows up." => 1,
"purpose" => 1,"of" => 1,"purpose of" => 1,"More" => 1,"to" => 2,"the one" => 1,
"is" => 2,"never" => 1,"complexity,"=> 1,"software" => 1,"one that" => 1)
ngd2 = NGramDocument(my_ngrams2)
ngram_complexity(ngd2)
# Using Other Libraries for Performing NLP in Julia
# Open your Python REPL and type the following:
# import nltk
# nltk.download()
# A Dialogue box will pop up and you can select the available options to download the modules of the NLTK library.
# After that you can follow with this in your Julia Environment
using Conda
Conda.add("nltk")
using PyCall
@pyimport nltk.tag as ptag
using DataFrames
# Using TextAnalysis to tokenize or WordTokenizer to do the same
ex = StringDocument("Julia is very fast but it is still young")
# TextAnalysis.tokens()
mytokens = tokens(ex)
# Using NLTK tags for finding the part of speech of our tokens
ptag.pos_tag(mytokens)
mytokens = tokens(fd)
ptag.pos_tag(mytokens)
postags = ptag.pos_tag(mytokens)
for i in 1:length(postags) println(postags[i][2]) end
# Neues 2-dimensionales Array bilden
pos2d = []
for i in 1:length(postags)
x = first.(postags)[i]
y = last.(postags)[i]
append!(pos2d, [[i, x, y, "noch nicht übersetzt"]])
end
using CSV
# Dictionary für PosTagging erstellen
dict_file = CSV.read("/home/heide/Dropbox/Julia-Einstieg/Text-Analysis/postag-dict.txt",delim=';')
posdict = Dict()
for i in 1:length(dict_file[1])
x = dict_file[i,1]
y = dict_file[i,2]
posdict[x]=y
end
# Neues 2-dimensionales Array bilden
pos2d = []
for i in 1:length(postags)
x = first.(postags)[i]
y = last.(postags)[i]
append!(pos2d, [[x, y, posdict[y]]])
end
pos2d = DataFrame(pos2d)
CSV.write("/home/heide/Dropbox/Julia-Einstieg/Text-Analysis/postags.txt",pos2d;header=false)
Das ist das, was ich herausgefunden habe, was funzt. Denn leider - wie zur Zeit immer - funzen viele Beispiele auf diese Anleitungen aus dem Web nicht mehr so wie sie sollten (weil sich offenbar schnell was an der Sprache weiterentwickelt und dadurch ändert ... so unjefähr ... {drücke mich schlecht aus, ich weiß}). Mein Code ist geprüft mit der Julia Version 1.2.0 .***
Der Inhalt des postag-dict.txt - Files:
Name;Description
CC;coordinating conjunction
CD;cardinal digit
DT;determiner
EX;existential there (like: “there is” … think of it like “there exists”)
FW;foreign word
IN;preposition/subordinating conjunction
JJ;adjective ‘big’
JJR;adjective, comparative ‘bigger’
JJS;adjective, superlative ‘biggest’
LS;list marker 1)
MD;modal could, will
NN;noun, singular ‘desk’
NNS;noun plural ‘desks’
NNP;proper noun, singular ‘Harrison’
NNPS;proper noun, plural ‘Americans’
PDT;predeterminer ‘all the kids’
POS;possessive ending parent’s
PRP;personal pronoun I, he, she
PRP$;possessive pronoun my, his, hers
RB;adverb very, silently,
RBR;adverb, comparative better
RBS;adverb, superlative best
RP;particle give up
TO;to go ‘to’ the store.
UH;interjection, errrrrrrrm
VB;verb, base form take
VBD;verb, past tense took
VBG;verb, gerund/present participle taking
VBN;verb, past participle taken
VBP;verb, sing. present, non-3d take
VBZ;verb, 3rd person sing. present takes
WDT;wh-determiner which
WP;wh-pronoun who, what
WP$;possessive wh-pronoun whose
WRB;wh-abverb where, when
,;Komma
:;Doppelpunkt
(;Klammer auf
);Klammer zu
.;Punkt
UPDATE
Diese Zeilen hatten noch gefehlt:
using Conda
Conda.add("nltk")
using PyCall
@pyimport nltk.tag as ptag
using DataFrames
Und ich wusste nicht mehr, dass die Zeile mit CSV.write noch nicht gefunzt hat bisher. Jetzt - würde ich sagen - wissen wir es alle hiermit. Kommt Zeit, kommt Funz.
*** Ich stelle grade aber fest, dass auch ich hier ein paar Kleinigkeiten vergessen haben muss ... zwei oder drei nur ... Wenn ich morgen Zeit hab', werde ich das beheben. Jedenfalls sind keine Funktionen/Methoden angegeben, die nicht mehr vorhanden sind in der neuen Version. Das sei doch immerhin schon mal etwas. Odder?
**** Nicht besonders geistreich, aber gut genug, ums kurz als Notiz iwohin zu schreiben*****:
Trinken, essen, rauchen.
Ich habe zu großes Verlangen.
Das Rauchen ist etwas Praktisches.
Es tötet auf lange Sicht das Verlangen,
es tötet den Menschen, der zuviel verlangt.
***** Und da ich grade am fremden Notebook hänge und auf meinen Blog zugreifen kann, kommt's - auch aus Bequemlischkeit, denn Google-Docs oder -Note ging ja auch - einfach mal hier rein, recht unmotiviert, was die Platzierung angeht ... hm, das "unmotiviert" lässt sich auch so nicht passend dengeln, ... egal, war Versuch ... und der war's auch nicht wert ... auch egal ... und trotzdem egal, nochmal für's Gesamte gesprochen, geschrieben ... ososososososo
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Link-Dreier
AfD-Arbeitsgruppe stellt Verfassungsfeindlichkeit fest
Justin Trudeau: Sie wollen nur ihre moralische Überlegenheit inszenieren | ZEIT ONLINE
Wenn Weisse Afrika retten wollen | NZZ
Kommentare
Kommentar veröffentlichen