ThePacker
Kochbuch
BearbeitenHallo! Bei Portaltreffen kamen wir auf die Lösung, solche umstrittenen Artikel wie das Schinkenbegräbnis zu Euch zu verschieben. Nicht als Schrott, aber als echte Alternative für Autoren vor der Löschung. Ich hatte eher die Lizensierung hier als bei Wikibooks gesehen. Könntest Du mir helfen, einen Standardablauf zu entwickeln, wie es bereits bei den Vereinen und dem Vereinswiki geschieht? Oliver S.Y. 22:50, 27. Feb. 2012 (CET)
- Hallo Oliver,
- Das Projekt Wikibooks existiert mittlerweile seit über sechs Jahren und das Kochbuch ist eines der ersten Projekte gewesen, das in unserem Projekt entstanden ist. Leider ist die Fluktuation bei den Wikipedia Autoren derart groß, dass man immer wieder darauf hinweisen muss, wie bei uns die Verfahren aussehen. Einerseits legen wir Wert auf den lizenzgerechten Import der Artikel und andererseits auf einige wenige Basics wie die von uns definierte Art der Namensraumnutzung. Immer wieder weisen unsere Administratoren darauf hin, wie das korrekte Verfahren eigentlich aussehen müsste. Jedoch bleibt dieses Wissen nicht lange halten. Insofern wäre es doch nützlich, wenn das Verfahren auf den Wikipedia einmal standardmäßig dokumentiert werden würde. Ich bezweifle jedoch, dass es die Copy und Paste-Verschieber tief beeindrucken wird. Auf der Seite: b:Kochbuch befindet sich ein "Rezept-Creator" bei dem man nur den Titel des Gerichts angeben kann und ein entsprechender Artikel mit der korrekten Form und der korrekten Namensraumnutzung erstellt werden kann. Bei einer lizenzgerechten Verschiebung ist der Import über die Seite b:Wikibooks:Import notwendig. Ist der Antrag gestellt, dann importiert einer der Administratoren des Wikibooks- Projekts den Artikel. Dann kann er auf der Wikipedia entsprechend gelöscht werden. -- ThePacker 23:02, 27. Feb. 2012 (CET)
- Danke für die Erklärung, ich schau mir das dann nochmal unter dieser Sichtweise an. Eine gewissen Qualität natürlich immer vorausgesetzt, besonders was die Quellenlage betrifft.Oliver S.Y. 23:07, 27. Feb. 2012 (CET)
- Schön wäre es außerdem, wenn der Artikel entsprechend aufbereitet werden würde, so dass wir nicht den Eindruck haben müssten, dass die Artikel bei uns nur abgeladen werden. Und nach dem Prinzip verfahren wird aus den Augen aus dem Sinn.-- ThePacker 23:08, 27. Feb. 2012 (CET)
Quellcode/Formel für Golomb-Redundanzen gesucht
BearbeitenHallo ThePacker,
Hast du zufällig noch den Gnuplot-Source von https://commons.wikimedia.org/wiki/File:GolombCodeRedundancy.svg ? Ich habe gerade große Schwierigkeiten einen ähnlichen Plot zu erstellen; Kurven wo m keine Zweierpotenz ist sehen bei mir falsch aus. --Krumonset (Diskussion) 20:31, 13. Jun. 2018 (CEST)
- @Benutzer:Krumonset Gute Frage. Ich meine, der liegt noch irgendwo rum. Brauchst Du ihn noch, oder hat es sich mittlerweile erledigt? -- ThePacker (Diskussion) 23:55, 18. Dez. 2018 (CET)
- Sorry für die späte Antwort, habe mich erst jetzt wieder mal angemeldet. -- ThePacker (Diskussion) 23:56, 18. Dez. 2018 (CET)
Habe es gefunden. Ist nicht schön. Aber ich hatte auch nicht vor damit Preise zu gewinnen ;-)...
function redundancy = calculateGolombCodeRedundancy(p)
#
# Funktion zur Berechnung der Code-Redundanz eines GolombCodes, wenn die
# Auftretenswahrscheinlichkeit des häufigeren Symbols 'p' beträgt.
#
# 0.5 <= p < 1 (Auftretenswahrscheinlichkeit von p)
#
# Mit Hilfe der Auftretenswahrscheinlichkeit, wird zunächst der
# für diesen Code optimale Parameter "m" bestimmt. Anschließend
# werden alle Symbole bis zu einer Auftretenswahrscheinlichkeit
# bis (2^(-20)) herangezogen.
#
# Diese Funktion benutzt folgende anderen Funktionen:
# * calculateGolombM
# * calculateGolombCodewordLength
#
# Berechnung des Wertes M für diesen Code.
m = calculateGolombM(p);
# - (sum (P(n)*log2(P(n)))
code_entropy = 0;
# sum (P(n)*CodeWordlength(m,n);
code_avglength = 0;
# Einbeziehung aller Codeworte bis Wahrscheinlichkeit 1/(2^20)
for n=0:20*m
# Berechnen von (1-p) * (p^n)
# P_n = (1-p) * (exp(n*log(p)));
P_n = (1-p) * (p^n);
# Summieren der Entropie
code_entropy = code_entropy - (P_n * log2(P_n));
# Summierden der mittleren Codewortlänge
code_avglength = code_avglength + (P_n * calculateGolombCodewordLength(m,n));
endfor
# Berechnen der Redundanz des Codes
redundancy = code_avglength - code_entropy;
endfunction
function m = calculateGolombM(p)
#
#
# Berechnung des optimalen Wert m,
# nach "Optimal Source Codes for Geometrically Distributed Integer Alphabets"
# von Robert G Gallager und David C. van Voorhis
# in IEEE Transactions on Information Theory (März 1975)
#
#
m = ceil(-(log(1+p)/log(p)));
endfunction
function codewordlength = calculateGolombCodewordLength(m,n)
#
#
# Diese Funktion implementiert die Berechnung der Codewortlänge des Symols 'n' wenn der Parameter
# m für die Codierung verwendet wird.
#
#
max_suffix_length = floor( log2(2*m) );
numberof_shortcodes = (2^max_suffix_length) - m;
# Prefixcodeword of Type aaaaaaaab [n/m] times 'a' and one 'b'
prefix_codelength = floor(n/m) + 1;
# Suffixcodeword number
suffix_code = mod(n,m);
if(suffix_code < numberof_shortcodes)
suffix_codelength = max_suffix_length - 1;
else
suffix_codelength = max_suffix_length;
endif
codewordlength = prefix_codelength + suffix_codelength;
endfunction
function p_opt = calculateGolombOptimumP4M(m)
#
# Diese Funktion berechnet das optimale P für ein vorgegebenes M
# an der stelle p_opt hat der Golombcode seine Minimale redundanz innerhalb des von M definierten intervalls
p_opt = exp(-(log(2)/floor(m)));
endfunction
function showGolombRedundancy
# clear all; # Causes Segmentation Fault on Octave 3.0.1
# clearplot;
# clear r;
# 2 Fenster übereinander
# multiplot(1,2)
# oberes Fenster selektieren
subplot(2,1,1);
hold on;
i=1;
r=linspace(0.45,0.925,1100);
x=r;
for p=x
r(i) = calculateGolombCodeRedundancy(p);
i++;
endfor
plot(x,r,'r-');
ylabel("Reduncancy R of Golombcode");
xlabel("Probability p of the MPS (most probable symbol) in [0.5-0.9]");
# eintragen der Werte für m
for k=1:8
x=calculateGolombOptimumP4M(k)-0.005;
y=0.04;
mytext = sprintf("m=%d",k);
text(x,y,mytext);
endfor
# unteres Fenster selektieren
subplot(2,1,2);
i=1;
r=linspace(0.895,0.996,1000);
x=r;
for p=x
r(i) = calculateGolombCodeRedundancy(p);
i++;
endfor;
plot(x,r,'r-');
ylabel("Reduncancy R of Golombcode");
xlabel("Probability p of the MPS (most probable symbol) in [0.9-0.98]");
for m=7:16
x=calculateGolombOptimumP4M(m);
y=0.035;
mytext = sprintf("m=%d",m);
text(x,y,mytext);
endfor
for m=3:6
x=calculateGolombOptimumP4M(2^m);
y=0.034;
mytext = sprintf("%d=[log2(m)]",m);
text(x,y,mytext);
endfor;
hold off;
print -dsvg "-S1600,1200" GolombCodeRedundancy.svg
# gset term png large size 1600,1200 "GolombRedundancy.gif";
# gset output "GolombRedundancy.png";
# replot();
# __gnuplot_set__ terminal postscript;
# __gnuplot_raw__ ("set output \"foo.ps\"\n");
# replot
endfunction
Bonus - Hiermit kannst Du die Codeworte entsprechend M und N berechnen.
function codeword = calculateGolombCodeword(m,n)
#
# Diese Funktion berechnet das Golomb-Codewort für den Wert n und der Basis m.
# Das Codewort wird mit mit Hilfe führender Nullen codiert
max_suffix_length = floor( log2(2*m) );
numberof_shortcodes = (2^max_suffix_length) - m;
# Suffixcodeword number
suffix_code = mod(n,m);
# Coding Prefix-Tree
# Führende Nullen mit Abschließender 1
bitencode(floor(n / m),0)
bitencode(1,1);
# Die Optimierte Variante sieht so aus:
# bitencode(1 + floor(n / m),1);
# Falls die Bits invertiert gespeichert werden sollen, so ist diese Variante zu verwenden.
# Führende Einsen mit Abschließender 0
# inverted_bitencode(floor(n/m),0);
# inverted_bitencode(1,1);
# Choose a short code / or long code
if(suffix_code < numberof_shortcodes)
bitencode(max_suffix_length - 1 , suffix_code);
else
bitencode(max_suffix_length , suffix_code + numberof_shortcodes);
endif
endfunction
Ich release es hiermit unter MIT-License. AS-IS. Fühle Dich frei diesen Code zu benutzen, wofür Du möchtest. Ich habe es damals nur runtergehackt und habe nicht vor diesen Code zu überarbeiten, da ich heute im Bereich ML/DL unterwegs bin. -- ThePacker (Diskussion) 22:02, 27. Dez. 2018 (CET)