Kochbuch

Bearbeiten

Hallo! 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)Beantworten

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)Beantworten
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)Beantworten
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)Beantworten

Quellcode/Formel für Golomb-Redundanzen gesucht

Bearbeiten

Hallo 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)Beantworten

@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)Beantworten
Sorry für die späte Antwort, habe mich erst jetzt wieder mal angemeldet. -- ThePacker (Diskussion) 23:56, 18. Dez. 2018 (CET)Beantworten


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)Beantworten