We analyse the number of pages of novels (i.e., fictional literary works) in the German National Library (DNB).
It is not trivial to extract all novels from a big catalogue like that of the German National library. “Librarians estimate that genre information is present in the expected MARC field for less than a quarter of the volumes in HathiTrust Digital Library,” (Underwood et al. 2013) and we encounter the same problem, which calls for an innovative solution.
Our approach is to
- extract a list of writers from Wikidata together with their GND id
- download linked data about the DNB books
- join the writer list with the list of books using the GND id
This repository documents the evolution of this process, which turned out to be not as straightforward as it seems. One reason is the size of the data and the complexity of queries.
These are the different approaches we have tried, ordered chronologically:
- querying Wikidata using a SPARQL endpoint
- extracting authors from the Wikidata dump with an occupation property of a subclass of Writer
- restricting to authors with a page in the German Wikipedia and works classified as “Roman”
This page shows the results for the latest approach which uses the tools and methods developed before with different restrictions to authors and works. Details on data extraction, cleansing, and joining are described in one of the earlier documents.
We have also compared page lengths against the “1001 Books You Must Read Before You Die”.
We restrict our analysis to works from the DNB dump which adhere to the following conditions:
- They were published in or after 1913 (
issued_norm
>= 1913). - At least one of their authors has a GND id and an occupation property in Wikidata and a sitelink to Wikipedia.
- The work has an extractable page number (
extent
matches the regex"\[?([0-9]+)\]? S(\.|eiten?);?
). - The works DNB property P60493 contains the character sequence “roman” or “Roman”.
When analysing publishers we further limit the maximal number of pages per work to 5000 to exclude errors.
Checksums:
for i in DNBTitel.rdf.gz DNBTitel_normalised_enriched.json.gz gnditems_2017-09-05_14:59.json.gz; do
echo "$i\t" $(ls -lh $i | awk '{print $5"\t"$6,$7,$8"\t"}') $(md5sum < $i)
done
file name | size | date | md5 hash |
---|---|---|---|
DNBTitel.rdf.gz | 1.6G | May 12 13:52 | 4dce7ed7e38bdc5f61491861b4a1082c |
DNBTitel_normalised_enriched.json.gz | 1.1G | Sep 5 16:29 | 8e640bca81e6ac7504da00e223d766d1 |
gnditems_2017-09-05_14:59.json | 102M | Sep 5 16:12 | 943a6a50e2c19afb73fb859b64b20f06 |
All values of the P60493 property for items that fulfill our conditions:
./json2json.py -f \
-p "issued_norm,pages_norm,P60493,creator_wd.*.sitelinks" \
DNBTitel_normalised_enriched.json.gz \
| awk -F'\t' '{if ($1 >= 1913) print $3}' | sort -n | uniq -c | sort -nr\
> P60493.tsv
Print the top matches:
echo "Bezeichnung\tHäufigkeit"
sed -e "s/^ *//" -e "s/ /\t/" P60493.tsv \
| awk -F'\t' '{if ($2 ~ /[rR]oman/) print $2"\t"$1}' \
| head -n50
echo -n "*Gesamtsumme*\t"
sed -e "s/^ *//" -e "s/ /\t/" P60493.tsv \
| awk -F'\t' '{if ($2 ~ /[rR]oman/) sum+=$1} END {print sum}'
Bezeichnung | Häufigkeit |
---|---|
Roman | 120985 |
Kriminalroman | 8657 |
[Roman] | 2671 |
roman | 2657 |
Science-fiction-Roman | 986 |
historischer Roman | 937 |
Kriminal-Roman | 903 |
Western-Roman | 760 |
Roman aus d. amerikan. Westen | 408 |
heiterer Roman | 405 |
Ein Roman | 403 |
Westernroman | 315 |
Arztroman | 313 |
ein Roman | 274 |
romanzo | 259 |
Fantasy-Roman | 250 |
Science-Fiction-Roman | 248 |
histor. Roman | 241 |
[roman] | 228 |
Abenteuerroman | 221 |
romanas | 219 |
Horror-Roman | 210 |
Wildwestroman | 203 |
Ein heiterer Roman | 200 |
[Kriminalroman] | 184 |
Wildwest-Roman | 181 |
Roman. | 163 |
historischer Kriminalroman | 163 |
Abenteuer-Roman | 161 |
Zukunftsroman | 160 |
zwei Romane in einem Band | 157 |
Utop. Roman | 153 |
Romanzo | 153 |
Frauenroman | 135 |
Planetenroman | 131 |
e. Roman | 129 |
utop. Roman | 128 |
Histor. Roman | 114 |
Jugendroman | 108 |
Kinderroman | 103 |
ein unheimlicher Roman | 98 |
Roman ; [Thriller] | 97 |
Wild-West-Roman | 93 |
Heiterer Roman | 93 |
Detektivroman | 90 |
John-Sinclair-Roman | 89 |
Roman für Kinder | 87 |
zwei Romane | 86 |
e. klass. Western-Roman | 85 |
Detektiv-Roman | 85 |
Gesamtsumme | 180219 |
./json2json.py -f \
-p "issued_norm,pages_norm,publisher,P60493,creator_wd.*.sitelinks" \
DNBTitel_normalised_enriched.json.gz \
| awk -F'\t' '{if ($1 >= 1913 && $3 == "Reclam") print $4}' | sort | uniq -c | sort -nr \
> reclam.tsv
Condition for all items:
issued_norm
>= 1913
./json2json.py -f \
-p "issued_norm,pages_norm" \
DNBTitel_normalised_enriched.json.gz \
| awk -F'\t' '{if ($1 >= 1913) print $1"\t"$2}' | sort -n \
> items_per_year-page.tsv
./json2json.py -f \
-p "issued_norm,pages_norm,creator_wd.*.sitelinks" \
DNBTitel_normalised_enriched.json.gz \
| awk -F'\t' '{if ($1 >= 1913) print $1"\t"$2}' | sort -n \
> items_per_year-page_author.tsv
./json2json.py -f \
-p "issued_norm,P60493" \
DNBTitel_normalised_enriched.json.gz \
| awk -F'\t' '{if ($1 >= 1913 && $2 ~ /[rR]oman/) print $1}' | sort -n \
> items_per_year-novel.tsv
./json2json.py -f \
-p "issued_norm,pages_norm,P60493" \
DNBTitel_normalised_enriched.json.gz \
| awk -F'\t' '{if ($1 >= 1913 && $3 ~ /[rR]oman/) print $1"\t"$2}' | sort -n \
> items_per_year-novel_page.tsv
./json2json.py -f \
-p "issued_norm,pages_norm,P60493,creator_wd.*.sitelinks" \
DNBTitel_normalised_enriched.json.gz \
| awk -F'\t' '{if ($1 >= 1913 && $3 ~ /[rR]oman/) print $1"\t"$2}' | sort -n \
> items_per_year-novel_page_author.tsv
wc -l items_per_year*.tsv
filter | items |
---|---|
page | 8346148 |
page + author | 1349949 |
novel | 353498 |
novel + page | 316518 |
novel + page + author | 180219 |
reset
set encoding utf8
set grid
set datafile separator "\t"
set xrange [1913:2017]
set xtics 10,10
set xlabel 'year'
set ylabel 'items'
set key left Left reverse
set y2tics
set term pngcairo enhanced size 800,600
set out 'img/items_per_year.png'
plot \
'< datamash -g1 count 1 < items_per_year-page.tsv' using 1:2 with lines axes x1y2 title 'Buecher mit Seitenzahlangabe (rechte y-Achse)',\
'< datamash -g1 count 1 < items_per_year-page_author.tsv' using 1:2 with lines title 'Buecher mit Seitenzahlangabe und Autor*in in Wikipedia',\
'< datamash -g1 count 1 < items_per_year-novel.tsv' using 1:2 with lines title 'Romane',\
'< datamash -g1 count 1 < items_per_year-novel_page.tsv' using 1:2 with lines title 'Romane mit Seitenzahlangabe',\
'< datamash -g1 count 1 < items_per_year-novel_page_author.tsv' using 1:2 with lines title 'Romane mit Seitenzahlangabe und Autor*in in Wikipedia'
set term svg enhanced size 800,600
set out 'img/items_per_year.svg'
replot
# relative frequency
set ylabel 'items'
set format y "%2.0f%%"
set term pngcairo enhanced size 800,600
set out 'img/items_per_year_rel.png'
plot \
'< datamash -g1 count 1 < items_per_year-page.tsv' using 1:(100*($2/8346148)) with lines title 'Buecher mit Seitenzahlangabe',\
'< datamash -g1 count 1 < items_per_year-page_author.tsv' using 1:(100*($2/1349949)) with lines title 'Buecher mit Seitenzahlangabe und Autor*in in Wikipedia',\
'< datamash -g1 count 1 < items_per_year-novel.tsv' using 1:(100*($2/353498)) with lines title 'Romane',\
'< datamash -g1 count 1 < items_per_year-novel_page.tsv' using 1:(100*($2/316518)) with lines title 'Romane mit Seitenzahlangabe',\
'< datamash -g1 count 1 < items_per_year-novel_page_author.tsv' using 1:(100*($2/180219)) with lines title 'Romane mit Seitenzahlangabe und Autor*in in Wikipedia'
set term svg enhanced size 800,600
set out 'img/items_per_year_rel.svg'
replot
for i in $(ls items_per_*tsv); do
echo $i $(datamash count 1 sum 2 < $i)
done
filter | items | pages | mean pages |
---|---|---|---|
page | 8346148 | 1327973922 | 159 |
page + author | 1349949 | 296472297 | 220 |
novel | 353498 | 0 | |
novel + page | 316518 | 98947311 | 313 |
novel + page + author | 180219 | 60717476 | 337 |
Of the original 14,102,309 items, we use 180,219 items with 60,717,476 pages. Those items fulfill the following conditions:
- We can extract the year they have been issued.
- They have been issued in or after 1913.
- We can extract their extent (number of pages).
- At least one of their authors has a GND id in Wikidata and a Wikipedia page (in any Wikipedia language version).
For this set we did not require that any other values are available (e.g., publisher) but some analyses might further restrict that set.
Compute frequencies:
sort -nk2 items_per_year-novel_page_author.tsv | datamash -g2 count 2 > pages_freq.tsv
Plot distribution:
reset
set term svg enhanced size 800,600
set out 'img/pages.svg'
set grid
set xrange [0:2000]
set logscale y
set format y "10^%T"
set xlabel 'number of pages'
set ylabel 'frequency'
plot 'pages_freq.tsv' using 1:2 with lines title ''
set term pngcairo enhanced size 800,600
set out 'img/pages.png'
replot
# showing bogen boundaries
unset logscale
unset format y
set xtics 0,16
# zoom into range 400 to 600 to see 16-patterns of pages
set xrange [400:600]
set term pngcairo enhanced size 800,600
set out 'img/pages_400-600.png'
plot 'pages_freq.tsv' using 1:2 with lines title ''
set term svg enhanced size 800,600
set out 'img/pages_400-600.svg'
replot
# zoom into range 200 to 400 to see 16-patterns of pages
set xrange [200:400]
set term pngcairo enhanced size 800,600
set out 'img/pages_200-400.png'
plot 'pages_freq.tsv' using 1:2 with lines title ''
set term svg enhanced size 800,600
set out 'img/pages_200-400.svg'
replot
# zoom into range 0 to 200 to see 16-patterns of pages
set xrange [0:200]
set term pngcairo enhanced size 800,600
set out 'img/pages_000-200.png'
plot 'pages_freq.tsv' using 1:2 with lines title ''
set term svg enhanced size 800,600
set out 'img/pages_000-200.svg'
replot
Bin pages in multiples of 16:
steps = 16
limit = 1009
with open("pages_freq_" + str(steps) + ".tsv", "wt") as out:
with open("pages_freq.tsv", "rt") as f:
bin = 0
binstr = ""
sumcount = 0
for line in f:
page, count = map(int, line.strip().split())
if page > limit:
if bin != limit:
bin = limit
binstr = str(limit) + " und mehr"
elif page > bin:
if sumcount > 0:
print(binstr, sumcount, file=out, sep='\t')
bin += steps
binstr = str(bin-steps+1) + "-" + str(bin)
sumcount = 0
sumcount += count
print(binstr, sumcount, file=out, sep='\t')
reset
set grid y
set datafile separator "\t"
set xlabel 'page ranges'
set ylabel 'number of books'
set style data histogram filled
set style fill solid 1.0 noborder lt -1
set xtics rotate
set term pngcairo enhanced size 1000,600 font "Arial,10"
set out 'img/pages_16.png'
plot 'pages_freq_16.tsv' using 2:xticlabels(1) title ''
set term svg enhanced size 1000,600 font "Arial,10"
set out 'img/pages_16.svg'
replot
Let’s plot the median number of pages per year:
export LC_ALL=C
datamash -g1 median 2 mean 2 min 2 max 2 count 2 q1 2 q3 2 < items_per_year-novel_page_author.tsv > issued_pages_stats.tsv
reset
set encoding utf8
set term pngcairo enhanced size 800,600
set out 'img/issued_pages_decade.png'
set grid
set datafile separator "\t"
set xlabel 'year'
set ylabel 'number of pages'
set xrange [1913:2020]
set xtics 10,10
set term pngcairo enhanced size 800,600
set out 'img/issued_pages_1913.png'
plot \
'issued_pages_stats.tsv' using 1:7:8 with filledcurves fs transparent solid 0.2 noborder lc rgb "green" title '1st and 2nd quartile',\
'issued_pages_stats.tsv' using 1:2 with lines lw 2 lt 3 lc rgb "green" title 'median'
#,\
# 'issued_pages_stats.tsv' using 1:3 with lines lw 2 lt 3 lc rgb "blue" title 'mean'
set term svg enhanced size 800,600
set out 'img/issued_pages_1913.svg'
replot
Plot cumulative frequency distribution of the number of pages:
reset
set encoding utf8
set term pngcairo enhanced size 800,600
set out 'img/cumulative_page_distrib.png'
set grid
set datafile separator "\t"
set xlabel 'number of pages'
set ylabel 'P[x < number of pages]'
set logscale x
# divide the y-value by the number of books in the dataset
plot \
'../1001-books/counts.tsv' using 1:($2/1001) smooth cumulative with lines title '1001 books',\
'pages_freq.tsv' using 1:($2/180219) smooth cumulative with lines title 'DNB'
set term svg enhanced size 800,600
set out 'img/cumulative_page_distrib.svg'
replot
The page distribution for the 1001 book list is skewed towards books with longer pages. Let’s compare two specific ranges of pages: more than 1000 pages vs. between 100 and 400 pages.
echo "dataset\t>1000 pages\t100-400 pages\tratio"
for file in ../1001-books/counts.tsv pages_freq.tsv; do
awk -F'\t' '
{
SUM += $2;
if ($1 > 1000) SUMBIG += $2;
if ($1 >= 100 && $1 <= 400) SUMSMALL += $2
} END {
printf("%s\t%s (%2.1f%%)\t%s (%2.1f%%)\t%2.4f\n", FILENAME, SUMBIG, SUMBIG/SUM*100, SUMSMALL, SUMSMALL/SUM*100, SUMBIG/SUMSMALL)
}' $file
done
dataset | >1000 pages | 100-400 pages | ratio |
---|---|---|---|
1001 -books | 23 (2.3%) | 682 (68.1%) | 0.0337 |
DNB | 1056 (0.6%) | 129167 (71.7%) | 0.0082 |
- TODO: plot distribution of the number of authors per work
./json2json.py -f \
-p "issued_norm,pages_norm,P60493,creator_wd.*.name,creator_wd.*.sitelinks" \
-c "creator_wd.*.name,creator_wd.*.sitelinks"\
DNBTitel_normalised_enriched.json.gz \
| awk -F'\t' '{if ($1 >= 1913 && $3 ~ /[rR]oman/) {sum[$4]+=$2; count[$4]+=1}} END {for (p in sum) printf("%s\t%s\t%s\t%s\n", sum[p], count[p], int(sum[p]/count[p]), p)}' \
> author_pages_stats.tsv
./json2json.py -f \
-p "issued_norm,pages_norm,P60493,creator_wd.*.name,creator_wd.*.id,creator_wd.*.sitelinks" \
-c "creator_wd.*.name,creator_wd.*.id,creator_wd.*.sitelinks"\
DNBTitel_normalised_enriched.json.gz \
| awk -F'\t' '{if ($1 >= 1913 && $3 ~ /[rR]oman/) print "[[https://www.wikidata.org/wiki/"$5"]["$4"]]"}' \
| sort -S1G | uniq -c | sort -nr | head -n50
author | items |
---|---|
Heinz G. Konsalik | 2232 |
Marie Louise Fischer | 1264 |
Gert Fritz Unger | 1013 |
Georges Simenon | 783 |
Utta Danella | 778 |
Edgar Wallace | 654 |
Hedwig Courths-Mahler | 647 |
Eleanor Hibbert | 635 |
Pearl S. Buck | 596 |
Alistair MacLean | 582 |
Stephen King | 577 |
Georgette Heyer | 576 |
Agatha Christie | 574 |
Theodor Fontane | 565 |
Hans Ernst | 563 |
Lion Feuchtwanger | 501 |
Erich Maria Remarque | 419 |
Hans Hellmut Kirst | 411 |
Johannes Mario Simmel | 403 |
Hans Fallada | 396 |
Heinrich Mann | 394 |
Fyodor Dostoyevsky | 390 |
Barbara Cartland | 390 |
Nora Roberts | 381 |
Graham Greene | 375 |
A. J. Cronin | 370 |
Vicki Baum | 366 |
Thomas Mann | 359 |
Robert Ludlum | 358 |
Gerd Hafner | 357 |
Dean Koontz | 354 |
Heinrich Böll | 340 |
Alexandra Cordes | 325 |
John le Carré | 322 |
Marion Zimmer Bradley | 321 |
Jason Dark | 317 |
Willi Heinrich | 313 |
Ludwig Ganghofer | 311 |
Jack London | 309 |
Joseph Roth | 307 |
Danielle Steel | 299 |
Johanna Lindsey | 288 |
Erle Stanley Gardner | 287 |
Siegfried Lenz | 279 |
Jules Verne | 277 |
Rosamunde Pilcher | 274 |
Franz Kafka | 271 |
Ernest Hemingway | 271 |
Taylor Caldwell | 269 |
Dorothy L. Sayers | 269 |
./json2json.py -f \
-p "issued_norm,pages_norm,creator_wd.*.name,creator_wd.*.id,creator_wd.*.sitelinks" \
-c "creator_wd.*.name,creator_wd.*.id,creator_wd.*.sitelinks"\
DNBTitel_normalised_enriched.json.gz \
| awk -F'\t' '{if ($1 >= 1913) print "[[https://www.wikidata.org/wiki/"$4"]["$3"]]"}' \
| sort -S1G | uniq -c | sort -nr | head -n50
author | items |
---|---|
Johann Wolfgang von Goethe | 5160 |
Rudolf Steiner | 3992 |
Hermann Hesse | 3363 |
Heinz G. Konsalik | 3190 |
Thomas Mann | 2609 |
Karl Marx | 2577 |
Friedrich Engels | 2568 |
Stefan Zweig | 2532 |
Friedrich Schiller | 2047 |
Franz Kafka | 2020 |
Jacob Grimm | 2020 |
Theodor Storm | 1967 |
Bertolt Brecht | 1948 |
Wilhelm Grimm | 1943 |
Erich Kästner | 1873 |
Heinrich Böll | 1796 |
Friedrich Nietzsche | 1788 |
William Shakespeare | 1700 |
Rainer Maria Rilke | 1689 |
Marie Louise Fischer | 1678 |
Gottfried Keller | 1666 |
Anselm Grün | 1605 |
Martin Luther | 1590 |
Sigmund Freud | 1568 |
Theodor Fontane | 1549 |
E. T. A. Hoffmann | 1533 |
Agatha Christie | 1531 |
Karl May | 1503 |
Heinrich Heine | 1388 |
Christine Nöstlinger | 1344 |
Hedwig Courths-Mahler | 1302 |
Wilhelm Hauff | 1290 |
Immanuel Kant | 1280 |
Gert Fritz Unger | 1264 |
Heinrich von Kleist | 1250 |
Janosch | 1210 |
Enid Blyton | 1210 |
Wilhelm Busch | 1191 |
Adalbert Stifter | 1184 |
Erich Maria Remarque | 1181 |
Vladimir Lenin | 1117 |
Johanna Spyri | 1106 |
Fyodor Dostoyevsky | 1088 |
Leo Tolstoy | 1082 |
Honoré de Balzac | 1081 |
Max Frisch | 1079 |
Jack London | 1071 |
Lion Feuchtwanger | 1048 |
Edgar Wallace | 1041 |
Carl Jung | 996 |
sort -S1G -nr author_pages_stats.tsv | head -n20
author | pages | items | mean pages |
---|---|---|---|
Heinz G. Konsalik | 692652 | 2232 | 310 |
Colleen McCullough | 419930 | 133 | 3157 |
Marie Louise Fischer | 331311 | 1264 | 262 |
Utta Danella | 324470 | 778 | 417 |
Stephen King | 293562 | 577 | 508 |
Fyodor Dostoyevsky | 269869 | 390 | 691 |
Lion Feuchtwanger | 248688 | 501 | 496 |
Eleanor Hibbert | 235388 | 635 | 370 |
Johannes Mario Simmel | 195975 | 403 | 486 |
Thomas Mann | 191233 | 359 | 532 |
Gert Fritz Unger | 188493 | 1013 | 186 |
Pearl S. Buck | 185999 | 596 | 312 |
Robert Ludlum | 185467 | 358 | 518 |
Hedwig Courths-Mahler | 184677 | 647 | 285 |
Theodor Fontane | 173444 | 565 | 306 |
Heinrich Mann | 172019 | 394 | 436 |
Nora Roberts | 171520 | 381 | 450 |
Hans Fallada | 169877 | 396 | 428 |
Leo Tolstoy | 163126 | 204 | 799 |
Georgette Heyer | 159427 | 576 | 276 |
sort -S1G -nrk3 author_pages_stats.tsv | head -n20
author | pages | items | mean pages | work |
---|---|---|---|---|
Pierre Alexis Ponson du Terrail | 3200 | 1 | 3200 | |
Colleen McCullough | 419930 | 133 | 3157 | |
Petra Mönter | 2290 | 1 | 2290 | |
Stefano D’Arrigo | 1470 | 1 | 1470 | |
Vikram Seth | 11208 | 8 | 1401 | |
Jonathan Littell | 4149 | 3 | 1383 | |
Margaret George | 35617 | 30 | 1187 | |
Lucien Rebatet | 1142 | 1 | 1142 | |
Miquel de Palol | 2266 | 2 | 1133 | |
Cornelia Wusowski | 14343 | 13 | 1103 | |
William H. Gass | 2184 | 2 | 1092 | |
William King | 1072 | 1 | 1072 | |
Franz Erhard Walther | 1071 | 1 | 1071 | |
Péter Nádas | 6414 | 6 | 1069 | |
Gregory David Roberts | 4250 | 4 | 1062 | |
Hans Albrecht Moser | 3171 | 3 | 1057 | |
Francisco Casavella | 1038 | 1 | 1038 | |
Susanna Clarke | 3068 | 3 | 1022 | |
Baltasar Gracián | 1013 | 1 | 1013 | |
Elizabeth Arthur | 2012 | 2 | 1006 |
There are probably some errors among those …
reset
set encoding utf8
set term pngcairo enhanced size 800,600
set out 'img/author_pages.png'
set grid
set datafile separator "\t"
set xrange [*:10000]
set logscale
set format y "10^%T"
set format x "10^%T"
set xlabel 'number of items'
set ylabel 'mean number of pages per item'
set label "Heinz G.\nKonsalik" left at 2232, 310 offset .5, .3
set label "Colleen McCullough" left at 133, 3157 offset .5, .3
set label "Margaret George" left at 30, 1187 offset .5, .3
# set label "Guenther Bentele" left at 27, 3842 offset .5, .3
# set label "Johann\nWolfgang\nvon\nGoethe" left at 5169, 235 offset -1.8, 3.6
plot 'author_pages_stats.tsv' using 2:3 with points pt 7 title ''
set term svg enhanced size 800,600
set out 'img/author_pages.svg'
replot
- TODO: top lists for different occupations
- TODO: item count vs. mean page count colored by occupation
./json2json.py -f -p "issued_norm,pages_norm,title,_id,P60493,creator_wd.*.sitelinks" \
DNBTitel_normalised_enriched.json.gz \
| awk -F'\t' '{if ($1 >= 1913 && $5 ~ /[rR]oman/) {print $2"\t[[http://d-nb.info/"$4"]["$3"]] ("$1")"}}' \
| sort -S1G -nr | head -n100
./json2json.py -f \
-p "issued_norm,pages_norm,title,_id,P60493,creator_wd.*.name,creator_wd.*.sitelinks" \
-c "creator_wd.*.name,creator_wd.*.sitelinks" \
DNBTitel_normalised_enriched.json.gz \
| awk -F'\t' '{if ($1 >= 1913 && $5 ~ /[rR]oman/ && $6 == "Franz Kafka") {print $2"\t[[http://d-nb.info/"$4"]["$3"]] ("$1")"}}' \
| sort -S1G -nr | head -n50
pages | title (year) |
---|---|
Das Werk (2011) | 1232 |
Zamok (2015) | 702 |
Zamok (2005) | 700 |
Propavšij bez vesti, (Amerika) (2006) | 651 |
Amerika (1991) | 604 |
Procesas (1994) | 571 |
Das Schloss (1967) | 543 |
Das Schloss (1964) | 543 |
Das Schloss (1962) | 543 |
Das Schloss (1926) | 504 |
Das Schloss (1991) | 501 |
Das Schloss (1982) | 501 |
Das Schloss (1951) | 496 |
Process (2009) | 478 |
Zamok (2007) | 475 |
Zamok (1991) | 475 |
Das Schloss (1960) | 462 |
Prigovor (1991) | 461 |
Das Schloss (1987) | 458 |
Das Schloß (2008) | 446 |
Das Schloss (1993) | 431 |
Das Schloss (1946) | 429 |
Der Verschollene (1983) | 426 |
Das Schloß (1935) | 425 |
Das Schloß (2006) | 423 |
Das Schloss (1996) | 423 |
Het slot (1993) | 417 |
Het slot (1983) | 417 |
Das Schloß (2007) | 416 |
Zamok (2012) | 413 |
Der Prozess (1925) | 411 |
Castelul (1968) | 402 |
Das Schloß (2007) | 401 |
Das Schloß (2005) | 401 |
Das Schloss (1994) | 399 |
Das Schloss (1993) | 399 |
Das Schloss (1993) | 399 |
Das Schloss (1992) | 399 |
Das Schloss (1992) | 399 |
Das Schloss (1989) | 397 |
Das Schloss (2005) | 396 |
Das Schloss (1988) | 396 |
Das Schloß (2004) | 394 |
Das Schloß (1999) | 394 |
Das Schloß (1999) | 394 |
Amerika (1927) | 392 |
Procesas (2004) | 391 |
Das Schloß (2012) | 380 |
Amerika (2003) | 375 |
Amerika (2000) | 375 |
We additionally consider only books with no more than 5000 pages to avoid skews in the page counts due to errors.
Extract data:
./json2json.py -f -p "issued_norm,pages_norm,publisher,P60493,creator_wd.*.sitelinks" \
DNBTitel_normalised_enriched.json.gz \
| awk -F'\t' '{if ($1 >= 1913 && $4 ~ /[rR]oman/ && $2 <= 5000) print $3"\t"$2}' \
| sort -S1G > publisher.tsv
datamash -s -g1 count 1 < publisher.tsv | sort -t$'\t' -S1G -nrk2 | head -n20
publisher | items |
---|---|
Heyne | 17249 |
Rowohlt | 9356 |
Goldmann | 8848 |
Ullstein | 4986 |
Dt. Taschenbuch-Verl. | 3864 |
Fischer-Taschenbuch-Verl. | 3612 |
Suhrkamp | 3513 |
RM-Buch-und-Medien-Vertrieb [u.a.] | 3461 |
Piper | 3363 |
Diogenes | 2303 |
Dt. Buch-Gemeinschaft | 1954 |
Weltbild | 1912 |
Fischer-Taschenbuch-Verlag | 1853 |
Büchergilde Gutenberg | 1810 |
Droemer Knaur | 1719 |
Rowohlt-Taschenbuch-Verl. | 1678 |
Blanvalet | 1630 |
Bastei-Verl. Lübbe | 1478 |
Zsolnay | 1238 |
Lübbe | 1205 |
After normalisation: see below
LC_ALL=C datamash -s -g1 count 1 sum 2 mean 2 < publisher.tsv | sort -t$'\t' -S1G -nrk3 | head -n20
publisher | items | page sum | mean pages |
---|---|---|---|
Heyne | 17249 | 6066956 | 352 |
Goldmann | 8848 | 2898130 | 328 |
Rowohlt | 9356 | 2604056 | 278 |
RM-Buch-und-Medien-Vertrieb [u.a.] | 3461 | 1565075 | 452 |
Ullstein | 4986 | 1536849 | 308 |
Dt. Taschenbuch-Verl. | 3864 | 1281876 | 332 |
Fischer-Taschenbuch-Verl. | 3612 | 1280201 | 354 |
Piper | 3363 | 1264808 | 376 |
Suhrkamp | 3513 | 1071240 | 305 |
Weltbild | 1912 | 925697 | 484 |
Blanvalet | 1630 | 774248 | 475 |
Dt. Buch-Gemeinschaft | 1954 | 746935 | 382 |
Droemer Knaur | 1719 | 716908 | 417 |
Diogenes | 2303 | 715190 | 311 |
Büchergilde Gutenberg | 1810 | 679455 | 375 |
Rowohlt-Taschenbuch-Verl. | 1678 | 610853 | 364 |
Aufbau-Verl. | 1205 | 525199 | 436 |
Fischer-Taschenbuch-Verlag | 1853 | 519204 | 280 |
Dt. Bücherbund | 1139 | 514752 | 452 |
Lübbe | 1205 | 505148 | 419 |
LC_ALL=C datamash -s -g1 count 1 sum 2 mean 2 < publisher.tsv | sort -t$'\t' -S1G -nrk4 | head -n20
publisher | items | page sum | mean pages |
---|---|---|---|
Ander | 1 | 3202 | 3202 |
K. M. John | 1 | 1258 | 1258 |
Dörfler | 1 | 1232 | 1232 |
Wissenschaftl. Buchges. | 7 | 8052 | 1150 |
Uitg. NAS | 1 | 1075 | 1075 |
Parkland | 3 | 3214 | 1071 |
Blanvalet-Verlag | 1 | 1056 | 1056 |
Nord | 1 | 1032 | 1032 |
Wissenschaftl. Buchges | 2 | 2030 | 1015 |
Schweizer Druck- u. Verl.-haus | 1 | 1003 | 1003 |
Jokers-Ed. | 1 | 989 | 989 |
Zentralverl. d. NSDAP Eher | 1 | 980 | 980 |
Uitg.De Arbeiderspers | 1 | 972 | 972 |
Implex-Verl. | 1 | 971 | 971 |
Libr. General Française | 1 | 955 | 955 |
Parkland-Verlag | 8 | 7397 | 925 |
Lesering. Das Bertelsmann Buch | 1 | 924 | 924 |
Roder | 1 | 904 | 904 |
Leon | 1 | 904 | 904 |
List-Taschenbuchverl. | 1 | 896 | 896 |
How is the number of items per publisher related to the mean number of pages per publisher?
LC_ALL=C datamash -s -g1 count 1 sum 2 mean 2 < publisher.tsv > publisher_page_stats.tsv
reset
set term pngcairo enhanced size 800,600
set out 'img/publisher_pages.png'
set grid
set datafile separator "\t"
set logscale
set xlabel 'number of items
set ylabel 'mean number of pages per item'
plot 'publisher_page_stats.tsv' using 2:4 with points pt 7 title ''
set term svg enhanced size 800,600
set out 'img/publisher_pages.svg'
replot
These rankings only comprise the normalised publishers.
Cleaning up the publishers now by deleting all rows which should not be regarded the same publisher and then creating a big intermediate file:
./json2json.py -m publisher_map.tsv -f -p "issued_norm,pages_norm,publisher_norm,title,_id,P60493,creator_wd.*.name,creator_wd.*.id" \
DNBTitel_normalised_enriched.json.gz \
| awk -F'\t' '{if ($1 >= 1913 && $2 <= 5000 && $6 ~ /[rR]oman/) print $0}' \
> publisher_data.tsv
cut -f3 publisher_data.tsv | sort -S1G | uniq -c | sort -nr
publisher | items |
---|---|
Heyne | 17430 |
Rowohlt | 11354 |
Goldmann | 8887 |
Ullstein | 5597 |
Suhrkamp | 3554 |
Piper | 3394 |
Aufbau | 2957 |
Kiepenheuer & Witsch | 1285 |
Reclam | 1117 |
Insel | 1063 |
Hoffmann und Campe | 988 |
Hanser | 854 |
Luchterhand Literaturverlag | 784 |
Manesse | 390 |
Eichborn | 360 |
Berlin Verlag | 238 |
Nagel & Kimche | 228 |
Ammann | 150 |
Schöffling & Co. | 147 |
Wallstein | 60 |
Verbrecher Verlag | 37 |
Blumenbar | 30 |
Rogner & Bernhard | 23 |
Wiesenburg | 20 |
Voland & Quist | 9 |
Urs Engeler Editor | 4 |
awk -F'\t' '{sum[$3]+=$2; count[$3]+=1} END {for (p in sum) printf("%s\t%s\t%s\t%s\n", sum[p], count[p], int(sum[p]/count[p]), p)}' publisher_data.tsv \
| sort -S1G -nr
publisher | page sum | items | mean pages |
---|---|---|---|
Heyne | 6148284 | 17430 | 352 |
Rowohlt | 3319270 | 11354 | 292 |
Goldmann | 2911633 | 8887 | 327 |
Ullstein | 1708227 | 5597 | 305 |
Piper | 1274961 | 3394 | 375 |
Aufbau | 1203891 | 2957 | 407 |
Suhrkamp | 1086269 | 3554 | 305 |
Kiepenheuer & Witsch | 422237 | 1285 | 328 |
Insel | 382329 | 1063 | 359 |
Hoffmann und Campe | 374922 | 988 | 379 |
Hanser | 298526 | 854 | 349 |
Reclam | 283163 | 1117 | 253 |
Luchterhand Literaturverlag | 253884 | 784 | 323 |
Manesse | 205907 | 390 | 527 |
Eichborn | 117060 | 360 | 325 |
Berlin Verlag | 72008 | 238 | 302 |
Nagel & Kimche | 53012 | 228 | 232 |
Schöffling & Co. | 48106 | 147 | 327 |
Ammann | 45497 | 150 | 303 |
Wallstein | 14337 | 60 | 238 |
Verbrecher Verlag | 12290 | 37 | 332 |
Rogner & Bernhard | 9376 | 23 | 407 |
Blumenbar | 7595 | 30 | 253 |
Wiesenburg | 4799 | 20 | 239 |
Voland & Quist | 2349 | 9 | 261 |
Urs Engeler Editor | 1197 | 4 | 299 |
awk -F'\t' '{sum[$3]+=$2; count[$3]+=1} END {for (p in sum) printf("%s\t%s\t%s\t%s\n", sum[p], count[p], int(sum[p]/count[p]), p)}' publisher_data.tsv \
| sort -S1G -nrk3
publisher | page sum | items | mean pages |
---|---|---|---|
Manesse | 205907 | 390 | 527 |
Rogner & Bernhard | 9376 | 23 | 407 |
Aufbau | 1203891 | 2957 | 407 |
Hoffmann und Campe | 374922 | 988 | 379 |
Piper | 1274961 | 3394 | 375 |
Insel | 382329 | 1063 | 359 |
Heyne | 6148284 | 17430 | 352 |
Hanser | 298526 | 854 | 349 |
Verbrecher Verlag | 12290 | 37 | 332 |
Kiepenheuer & Witsch | 422237 | 1285 | 328 |
Schöffling & Co. | 48106 | 147 | 327 |
Goldmann | 2911633 | 8887 | 327 |
Eichborn | 117060 | 360 | 325 |
Luchterhand Literaturverlag | 253884 | 784 | 323 |
Ullstein | 1708227 | 5597 | 305 |
Suhrkamp | 1086269 | 3554 | 305 |
Ammann | 45497 | 150 | 303 |
Berlin Verlag | 72008 | 238 | 302 |
Urs Engeler Editor | 1197 | 4 | 299 |
Rowohlt | 3319270 | 11354 | 292 |
Voland & Quist | 2349 | 9 | 261 |
Blumenbar | 7595 | 30 | 253 |
Reclam | 283163 | 1117 | 253 |
Wiesenburg | 4799 | 20 | 239 |
Wallstein | 14337 | 60 | 238 |
Nagel & Kimche | 53012 | 228 | 232 |
Average page count per year per publisher:
awk -F'\t' '{print int($1/10)"\t"$3"\t"$2}' publisher_data.tsv | sort | datamash -g1,2 mean 3 median 3 | sed "s/,/./g" | sort -n > publisher_pages_decades.tsv
reset
set encoding utf8
set term pngcairo enhanced size 800,600
set out 'img/publisher_pages_decades.png'
set grid
set datafile separator "\t"
set xlabel 'year'
set ylabel 'median number of pages'
set key top left horizontal maxcols 4
plot \
'< grep Heyne publisher_pages_decades.tsv' using ($1*10):4 with linespoints pt 7 lw 2 title 'Heyne',\
'< grep Rowohlt publisher_pages_decades.tsv' using ($1*10):4 with linespoints pt 7 lw 2 title 'Rowohlt',\
'< grep Goldmann publisher_pages_decades.tsv' using ($1*10):4 with linespoints pt 7 lw 2 title 'Goldmann',\
'< grep Ullstein publisher_pages_decades.tsv' using ($1*10):4 with linespoints pt 7 lw 2 title 'Ullstein',\
'< grep Suhrkamp publisher_pages_decades.tsv' using ($1*10):4 with linespoints pt 7 lw 2 title 'Suhrkamp',\
'< grep Piper publisher_pages_decades.tsv' using ($1*10):4 with linespoints pt 7 lw 2 title 'Piper',\
'< grep Aufbau publisher_pages_decades.tsv' using ($1*10):4 with linespoints pt 8 lw 2 title 'Aufbau',\
'< grep Kiepenheuer publisher_pages_decades.tsv' using ($1*10):4 with linespoints pt 8 lw 2 title 'Kiepenheuer & Witsch',\
'< grep Reclam publisher_pages_decades.tsv' using ($1*10):4 with linespoints pt 7 lw 2 title 'Reclam',\
'< grep Insel publisher_pages_decades.tsv' using ($1*10):4 with linespoints pt 7 lw 2 title 'Insel'
set term svg enhanced size 800,600
set out 'img/publisher_pages_decades.svg'
replot
Iterate over publishers:
for publisher in $(awk -F'\t' '{print $2}' publisher_map.tsv | sort -u | sed "s/ /###/g"); do
# get publisher name
publisher=$(echo $publisher | sed "s/###/ /g")
#echo "$publisher\t" $(awk -F'\t' -v p="$publisher" '{if ($3 == p) print $2"\t hier dann Titel, Autor, Jahr"}' publisher_data.tsv | wc -l)
# extract all works
echo "\n**** $publisher\n"
echo "| pages | author: title (year) |"
awk -F'\t' -v p="$publisher" '{if ($3 == p) print "| "$2" | [[https://www.wikidata.org/wiki/"$8"]["$7"]]: [[http://d-nb.info/"$5"]["$4"]] ("$1")"}' publisher_data.tsv | sort -t'|' -nrk2 | head -n20
done
pages | author: title (year) |
---|---|
962 | Fyodor Dostoyevsky: Böse Geister (1998) |
909 | Fyodor Dostoyevsky: Der Idiot (1996) |
766 | Fyodor Dostoyevsky: Verbrechen und Strafe (1994) |
652 | Antonio Moresco: Aufbrüche (2005) |
607 | Svend Aage Madsen: Sieben Generationen Wahnsinn (2000) |
572 | Ulrich Peltzer: Stefan Martinez (1995) |
563 | Darcy Ribeiro: Migo (1994) |
537 | Christoph Geiser: Grünsee (2006) |
534 | Marcel Konrad: In meinem Rücken hängt das Vatertier - vor meinen Füssen liegt das Muttertier (1988) |
507 | Éric-Emmanuel Schmitt: Adolf H.: zwei Leben (2007) |
479 | Marcel Konrad: Stoppelfelder (1983) |
478 | Ismail Kadare: Der Raub des königlichen Schlafs (2008) |
477 | Steinunn Sigurðardóttir: Herzort (2001) |
473 | Bernd Steinhardt: Der Traum der steinernen Drachen (1997) |
472 | Bernhard Kegel: Das Ölschieferskelett (1996) |
462 | Bernhard Kegel: Sexy Sons (2001) |
459 | Richard Powers: Galatea 2.2 (1997) |
457 | Bernard MacLaverty: Die Schule der Anatomie (2003) |
457 | Ralph Ellison: Juneteenth (2000) |
456 | Joseph O’Connor: Desperados (1996) |
pages | author: title (year) |
---|---|
1359 | Vikram Chandra: Der Pate von Bombay (2009) |
1291 | Leo Tolstoy: Krieg und Frieden (2010) |
1243 | Hans Fallada: Wolf unter Wölfen (2011) |
1227 | Leo Tolstoy: Anna Karenina (2008) |
1211 | Friedrich Gorenstein: Der Platz (1995) |
1200 | Fyodor Dostoyevsky: Die Brüder Karamasow (2008) |
1183 | Leo Tolstoy: Anna Karenina (1996) |
1133 | Miquel de Palol: Im Garten der sieben Dämmerungen (2007) |
1133 | Miquel de Palol: Der Garten der sieben Dämmerungen (1999) |
1087 | Leo Tolstoy: Krieg und Frieden (2008) |
1054 | Aleksey Nikolayevich Tolstoy: Peter der Erste (1952) |
1034 | Thomas Mann: Der Zauberberg (1953) |
1031 | Hans Fallada: Wolf unter den Wölfen (1957) |
1028 | Thomas Mann: Der Zauberberg (1979) |
1028 | Thomas Mann: Der Zauberberg (1965) |
1028 | Thomas Mann: Der Zauberberg (1968) |
1026 | Thomas Mann: Der Zauberberg (1962) |
1024 | Hans Fallada: Wolf unter Wölfen (1956) |
1013 | Hans Fallada: Wolf unter Wölfen (1960) |
1013 | Hans Fallada: Wolf unter Wölfen (1965) |
pages | author: title (year) |
---|---|
693 | Margaret Atwood: Der blinde Mörder (2000) |
681 | Richard Ford: Die Lage des Landes (2007) |
633 | Amir Gutfreund: Unser Holocaust (2003) |
622 | Margaret Atwood: Alias Grace (1996) |
588 | Richard Ford: Unabhängigkeitstag (1995) |
588 | Mathias Énard: Zone (2010) |
580 | Zeruya Shalev: Späte Familie (2005) |
567 | Katharina Hartwell: Das fremde Meer (2013) |
555 | William Boyd: Die Fotografin (2016) |
553 | Alexis Panselinos: Zaide oder das Kamel im Schnee (2001) |
538 | Hartwig Schultz: Schwarzer Schmetterling (2000) |
530 | Péter Esterházy: Ein Produktionsroman (zwei Produktionsromane) (2010) |
511 | David Guterson: Schnee, der auf Zedern fällt (1999) |
511 | David Guterson: Schnee, der auf Zedern fällt (1995) |
510 | Katherine Dunn: Binewskis (2013) |
506 | Nadine Gordimer: Keine Zeit wie diese (2012) |
495 | Patricia Duncker: James Miranda Barry (1999) |
493 | Gila Lustiger: Die Schuld der anderen (2015) |
491 | Michael Roes: Der Coup der Berdache (1999) |
484 | Frances Itani: Betäubend (2003) |
pages | author: title (year) |
---|---|
429 | Tony Parsons: Als wir unsterblich waren (2007) |
428 | Joseba Sarrionandia: Der gefrorene Mann (2007) |
415 | Edan Lepucki: California (2015) |
325 | Alban Lefranc: Angriffe (2008) |
323 | Hunter S. Thompson: Rum Diary (2010) |
319 | Paul Beatty: Slumberland (2009) |
318 | Imran Ayata: Mein Name ist Revolution (2011) |
318 | Leonard Cohen: Das Lieblingsspiel (2009) |
317 | Raul Zelik: Berliner Verhältnisse (2005) |
315 | Alexander Wall; Ingo Niermann: Deutscher Sohn (2010) |
310 | Franz Xaver Karl: Starschnitt (2004) |
286 | Raul Zelik: Der bewaffnete Freund (2007) |
283 | Hunter S. Thompson: The rum diary (2004) |
258 | Hans-Peter Kunisch: Die Verlängerung des Markts in den Abend hinein (2006) |
257 | Thomas Palzer: Ruin (2005) |
254 | Jasmin Ramadan: Soul kitchen (2009) |
251 | Franz Xaver Karl: Fünf Tage im Juli (2007) |
235 | Bov Bjerg: Auerhaus (2015) |
222 | Leena Krohn: Stechapfel (2006) |
220 | DBC Pierre: Frühstück mit den Borgias (2016) |
pages | author: title (year) |
---|---|
1814 | Urs Richle: Der weisse Chauffeur (1996) |
1081 | Rolf Vollmann: Die wunderbaren Falschmünzer (1997) |
954 | Paul Verhaeghen: Omega minor (2006) |
798 | Faye Kellerman: Becca (1993) |
741 | Hédi Kaddour: Waltenberg (2009) |
735 | Steffen Kopetzky: Grand Tour oder die Nacht der Großen Complication (2002) |
671 | Neil Gaiman: American gods (2015) |
655 | Yan Lianke: Lenins Küsse (2015) |
655 | Redmond O’Hanlon: Kongofieber (1998) |
655 | Petra Morsbach: Plötzlich ist es Abend (1995) |
639 | David Gilbert: Was aus uns wird (2014) |
603 | Gerhard Seyfried: Herero (2003) |
589 | Roger Stern: Superman (1994) |
587 | Thor Kunkel: Endstufe (2004) |
581 | Sven Regener: Neue Vahr Süd (2004) |
581 | Lindsey Davis: Bronzeschatten (1992) |
580 | George Gissing: Zeilengeld (1993) |
577 | Thomas Harlan: Heldenfriedhof (2006) |
556 | Henning Boe͏̈tius: Der Gnom (1989) |
554 | Lindsey Davis: Letzter Akt in Palmyra (1996) |
pages | author: title (year) |
---|---|
1469 | Lothar-Günther Buchheim: Die Festung (1997) |
1332 | Margaret George: Heinrich VIII. (2001) |
1332 | Margaret George: Heinrich VIII. (1999) |
1332 | Margaret George: Heinrich VIII. (1997) |
1332 | Margaret George: Heinrich VIII., mein Leben (1991) |
1326 | Dan Simmons: Endymion (2003) |
1271 | James Clavell: Noble House (2002) |
1247 | James Clavell: Gai-jin (2003) |
1247 | James Clavell: Gai-jin (1997) |
1247 | James Clavell: Gai-jin (1995) |
1240 | William Gaddis: Die Fälschung der Welt (2000) |
1225 | James Clavell: Shōgun (2002) |
1196 | Diana Gabaldon: Der Ruf der Trommel (2003) |
1196 | Diana Gabaldon: Der Ruf der Trommel (2002) |
1196 | Diana Gabaldon: Der Ruf der Trommel (2000) |
1180 | Charles Dickens: Die Pickwickier (1984) |
1180 | Neal Stephenson: Cryptonomicon (2005) |
1180 | Neal Stephenson: Cryptonomicon (2003) |
1180 | Neal Stephenson: Cryptonomicon (2001) |
1145 | Neal Stephenson: Quicksilver (2010) |
pages | author: title (year) |
---|---|
1465 | Jaan Kross: Das Leben des Balthasar Rüssow (1995) |
1452 | Horst Bienek: Gleiwitz (2000) |
1284 | Leo Tolstoy: Anna Karenina (2009) |
1228 | Navid Kermani: Dein Name (2011) |
1228 | John Cowper Powys: Glastonbury romance (1995) |
1093 | Roberto Bolaño: 2666 (2009) |
1007 | Charles Maturin: Melmoth der Wanderer (1969) |
1007 | Charles Maturin: Melmoth der Wanderer (1970) |
1004 | Julien Green: Von fernen Ländern (1988) |
958 | Honoré de Balzac: Verlorene Illusionen (2014) |
957 | Lars Gustafsson: Risse in der Mauer (2006) |
957 | Hanya Yanagihara: Ein wenig Leben (2016) |
907 | Danilo Kiš: Familienzirkus (2014) |
905 | Martin Grzimek: Tristan (2011) |
895 | Rafik Schami: Die dunkle Seite der Liebe (2004) |
844 | Gustav Freytag: Soll und Haben (1977) |
841 | Julien Green: Die Sterne des Südens (1990) |
838 | Ivan Goncharov: Oblomow (2012) |
826 | Charles Dickens: Große Erwartungen (2011) |
797 | Harry Mulisch: Die Entdeckung des Himmels (1995) |
pages | author: title (year) |
---|---|
1997 | Vikram Seth: Eine gute Partie (1999) |
1711 | Stephen King: The stand (2016) |
1533 | Stephen King: Es (2011) |
1530 | Sergey Lukyanenko: Die Wächter-Trilogie (2008) |
1424 | Stan Nicholls: Die Orks - die Rückkehr (2012) |
1408 | Dan Abnett: Ravenor (2010) |
1407 | Bernard Werber: Die Invasion (2010) |
1349 | Dan Abnett: Eisenhorn (2012) |
1324 | Guillermo del Toro: Die Saat (2016) |
1307 | Hans Joachim Alpers: Deutschland in den Schatten (2003) |
1307 | Nora Roberts: Die Garten-Eden-Trilogie (2008) |
1291 | John Grisham: Die Jury (2001) |
1279 | Kim Newman: Die Vampire (2009) |
1279 | Stephen King: Die Arena (2009) |
1279 | Stephen King: Die Arena (2011) |
1248 | Dan Abnett: Gaunts Geister (2012) |
1242 | C. J. Cherryh: Geklont (1998) |
1214 | Stephen King: Es (1996) |
1210 | Jean M. Auel: Die Kinder der Erde (1994) |
1202 | Gisbert Haefs: Alexander (2002) |
pages | author: title (year) |
---|---|
2880 | Doris Gercke: Kein fremder Land (1993) |
1469 | Lothar-Günther Buchheim: Die Festung (1995) |
1469 | Lothar-Günther Buchheim: Die Festung (1995) |
1421 | Vikram Seth: Eine gute Partie (1995) |
1421 | Vikram Seth: Eine gute Partie (1995) |
926 | Herman Wouk: Der Feuersturm (1972) |
926 | Herman Wouk: Der Feuersturm (1972) |
861 | Nelson DeMille: Das Vermächtnis (2009) |
819 | Martin Mosebach: Westend (1992) |
799 | Tom Clancy: Ehrenschuld (1996) |
799 | Tom Clancy: Ehrenschuld (1996) |
799 | Tom Clancy: Ehrenschuld (1996) |
783 | Alexandra Ripley: Scarlett (1995) |
783 | Alexandra Ripley: Scarlett (1994) |
783 | Alexandra Ripley: Scarlett (1992) |
783 | Alexandra Ripley: Scarlett (1991) |
783 | Alexandra Ripley: Scarlett (1991) |
764 | Federica de Cesco: Silbermuschel (1996) |
764 | Federica de Cesco: Silbermuschel (1994) |
764 | Federica de Cesco: Silbermuschel (1994) |
pages | author: title (year) |
---|---|
1320 | Frank Schätzing: Limit (2009) |
1035 | Manès Sperber: Wie eine Träne im Ozean (1965) |
1035 | Manès Sperber: Wie eine Träne im Ozean (1961) |
1033 | Erwin Strittmatter: Der Laden (1989) |
1001 | René Schickele: Das Erbe am Rhein (1965) |
997 | Frank Schätzing: Der Schwarm (2004) |
965 | Don DeLillo: Unterwelt (1998) |
964 | Frank Schätzing: Breaking News (2014) |
892 | Maxim Biller: Biografie (2016) |
874 | André Brink: Zeit des Terrors (1994) |
861 | Holger Karsten Schmidt: Isenhart (2012) |
858 | Saul Bellow: Die Abenteuer des Augie March (2008) |
854 | Zyranna Zateli: Und beim Licht des Wolfes kehren sie wieder (1997) |
831 | Annemarie Selinko: Désirée (2002) |
829 | Bret Easton Ellis: Glamorama (2010) |
827 | Bret Easton Ellis: Glamorama (2008) |
811 | Michael Chabon: Die unglaublichen Abenteuer von Kavalier & Clay (2010) |
811 | Michael Chabon: Die unglaublichen Abenteuer von Kavalier & Clay (2002) |
808 | Lion Feuchtwanger: Erfolg (1989) |
808 | Hermann Kesten: Die blaue Blume (1959) |
pages | author: title (year) |
---|---|
925 | Charles Chadwick: Ein unauffälliger Mann (2007) |
859 | Russell Banks: John Brown, mein Vater (2000) |
841 | Richard Bausch: Die Kannibalen (2004) |
793 | Karl Ove Knausgård: Träumen (2015) |
780 | Aleksandr Solzhenitsyn: August vierzehn (1974) |
780 | Aleksandr Solzhenitsyn: August vierzehn (1973) |
780 | Aleksandr Solzhenitsyn: August vierzehn (1972) |
765 | Alexis Jenni: Die französische Kunst des Krieges (2012) |
762 | Karl Ove Knausgård: Lieben (2012) |
749 | António Lobo Antunes: Guten Abend ihr Dinge hier unten (2005) |
736 | Günter Grass: Die Blechtrommel (1959) |
734 | Aleksandr Solzhenitsyn: Krebsstation (1974) |
730 | Günter Grass: Die Blechtrommel (1991) |
720 | Günter Grass: Die Blechtrommel (1984) |
714 | Günter Grass: Die Blechtrommel (1971) |
714 | Günter Grass: Die Blechtrommel (1966) |
702 | Jamie O’Neill: Im Meer, zwei Jungen (2003) |
700 | Vladimir Makanin: Underground oder ein Held unserer Zeit (2003) |
700 | Anna Seghers: Die Toten bleiben jung (1967) |
700 | António Lobo Antunes: Was werd ich tun, wenn alles brennt? (2003) |
pages | author: title (year) |
---|
pages | author: title (year) |
---|---|
772 | Charles Lewinsky: Melnitz (2006) |
555 | Jakob Schaffner: Johannes (2005) |
539 | Charles Lewinsky: Gerron (2011) |
457 | Enrique Vila-Matas: Doktor Pasavento (2007) |
455 | Milena Moser: Möchtegern (2010) |
443 | John Fusco: Das Gesetz der Familie (2003) |
442 | Simon Werle: Der Schnee der Jahre (2003) |
425 | Gabriel Chevallier: Heldenangst (2010) |
415 | Francine Prose: Durchtrieben (2001) |
411 | Eduardo Mendoza Garriga: Katzenkrieg (2012) |
409 | Hermann Burger: Schilten (2009) |
399 | Dara Horn: Ausgelöscht sei der Tag (2002) |
397 | Charles Lewinsky: Kastelau (2014) |
396 | Noah Hawley: Der Vater des Attentäters (2014) |
396 | Charles Lewinsky: Andersen (2016) |
394 | Rolf Lappert: Die Gesänge der Verlierer (1995) |
394 | Milena Moser: Montagsmenschen (2012) |
390 | Lukas Hartmann: Die Tochter des Jägers (2002) |
380 | Gottfried Keller: Martin Salander (2003) |
369 | Ulrich Knellwolf: Auftrag in Tartu (1999) |
pages | author: title (year) |
---|---|
1319 | Wu Cheng’en: Die Reise in den Westen (2016) |
890 | Fyodor Dostoyevsky: Schuld und Sühne (1999) |
882 | Johann Wolfgang von Goethe: Wilhelm Meisters Lehrjahre (1986) |
761 | D. H. Lawrence: Söhne und Liebhaber (2011) |
703 | Fyodor Dostoyevsky: Schuld und Sühne (Raskolnikow) (1917) |
657 | Théophile Gautier: Kapitän Fracasse (1968) |
657 | Théophile Gautier: Kapitän Fracasse (1964) |
657 | Théophile Gautier: Kapitän Fracasse (1960) |
653 | Louise von François: Stufenjahre eines Glücklichen (1924) |
628 | Mór Jókai: Ein Goldmensch (1967) |
622 | Émile Zola: Germinal (1994) |
622 | Émile Zola: Germinal (1991) |
622 | Émile Zola: Germinal (1985) |
622 | Émile Zola: Germinal (1980) |
622 | Émile Zola: Germinal (1974) |
617 | Jane Austen: Mansfield Park (2008) |
617 | Jane Austen: Mansfield Park (2016) |
617 | Jane Austen: Mansfield Park (2013) |
611 | Nikolai Ostrovsky: Wie der Stahl gehärtet wurde (1964) |
600 | Jane Austen: Emma (2007) |
pages | author: title (year) |
---|---|
1196 | Tom Sharpe: Neue Sharpe-Sachen (1999) |
1030 | Tom Sharpe: Sharpe-Sachen (1987) |
559 | T. Coraghessan Boyle: Wassermusik (2010) |
509 | Ragnar Hovland: Der Himmel ist leer (1999) |
491 | Terry McMillan: Ab durch die Mitte (1993) |
480 | Edith Wharton: Zeit der Unschuld (1986) |
420 | Edith Wharton: Sommer (1986) |
369 | Armistead Maupin: Die Kleine (1994) |
351 | Pavo Pejić: Pussykiller (2009) |
350 | Matthias Keidtel: Ein Mann wie Holm (2006) |
345 | Tom Sharpe: FamilienBande (1989) |
326 | William Gibson: Virtuelles Licht (1993) |
314 | Marie Cardinal: Schattenmund (1977) |
309 | Alexa Hennig von Lange: Relax (1997) |
304 | Terry McMillan: Mama (1993) |
304 | Michael Muhammad Knight: Taqwacore (2012) |
304 | Bruce Wagner: Der Goldblütenpalast (2006) |
287 | Zelda Fitzgerald: Schenk mir den Walzer (1984) |
268 | Paul Nizan: Die Verschwörung (1975) |
233 | Jean Rhys: Quartett (1978) |
pages | author: title (year) |
---|---|
1723 | Péter Nádas: Parallelgeschichten (2013) |
1671 | Robert Musil: Der Mann ohne Eigenschaften (1952) |
1632 | Robert Musil: Der Mann ohne Eigenschaften (1974) |
1632 | Robert Musil: Der Mann ohne Eigenschaften (1967) |
1632 | Robert Musil: Der Mann ohne Eigenschaften (1960) |
1632 | Robert Musil: Der Mann ohne Eigenschaften (1970) |
1595 | Thomas Pynchon: Gegen den Tag (2010) |
1595 | Thomas Pynchon: Gegen den Tag (2008) |
1342 | Harold Brodkey: Die flüchtige Seele (1997) |
1342 | Harold Brodkey: Die flüchtige Seele (1995) |
1303 | Péter Nádas: Buch der Erinnerung (1992) |
1230 | Irving Stone: Der Seele dunkle Pfade (2001) |
1228 | Navid Kermani: Dein Name (2015) |
1210 | Rosamunde Pilcher: Heimkehr (2014) |
1196 | Thomas Wolfe: Von Zeit und Strom (1989) |
1196 | Thomas Wolfe: Von Zeit und Strom (1989) |
1193 | Thomas Pynchon: Die Enden der Parabel (1998) |
1193 | Thomas Pynchon: Die Enden der Parabel (1994) |
1193 | Thomas Pynchon: Die Enden der Parabel (1991) |
1193 | Thomas Pynchon: Die Enden der Parabel (1989) |
pages | author: title (year) |
---|---|
1001 | Guntram Vesper: Frohburg (2016) |
786 | Bora Ćosić: Die Tutoren (2015) |
758 | Heinz Rein: Finale Berlin (2015) |
699 | Ulrich Becher: Murmeljagd (2009) |
653 | Silvia Tennenbaum: Straßen von gestern (2012) |
621 | Rudolf Lorenzen: Alles andere als ein Held (2002) |
612 | Miljenko Jergović: Das Walnusshaus (2008) |
603 | Sebastian Faulks: Gesang vom großen Feuer (1997) |
565 | Juli Zeh: Spieltrieb (2004) |
559 | Martin Kessel: Herrn Brechers Fiasko (2001) |
550 | Simon Urban: Plan D (2011) |
547 | Hans Pleschinski: Brabant (1995) |
541 | Russell Banks: Verstoßen (2015) |
539 | Martin Kessel: Lydia Faude (2001) |
537 | Jennifer Egan: Die Farbe der Erinnerung (1999) |
535 | Jennifer Egan: Look at me (2002) |
524 | Markus Orths: Alpha & Omega (2014) |
506 | Amy Waldman: Der amerikanische Architekt (2013) |
491 | Tanja Dückers: Hausers Zimmer (2011) |
488 | Bernard von Brentano: Theodor Chindler (2014) |
pages | author: title (year) |
---|---|
1214 | Stephen King: Es (2009) |
1214 | Stephen King: Es (2005) |
1214 | Stephen King: Es (2003) |
1149 | Leonie Ossowski: Weichselkirschen (2000) |
1119 | Margaret Mitchell: Vom Winde verweht (2007) |
1119 | Margaret Mitchell: Vom Winde verweht (2004) |
1119 | Margaret Mitchell: Vom Winde verweht (2003) |
1099 | Federica de Cesco: Die Tibeterin (2015) |
1047 | Mario Puzo: Der letzte Pate (2000) |
1047 | Richard Dübell: Der Jahrhundertsturm (2015) |
1024 | Gerhart Hauptmann: Das Abenteuer meiner Jugend (2007) |
1013 | Matthias Wegehaupt: Die Insel (2005) |
989 | Meinrad Inglin: Schweizerspiegel (1998) |
973 | Nelson DeMille: Die Mission (2005) |
973 | Nelson DeMille: Die Mission (2004) |
973 | Nelson DeMille: Die Mission (2002) |
951 | James Ellroy: Perfidia (2015) |
949 | James Ellroy: Perfidia (2016) |
947 | Christine Brückner: Jauche und Levkojen (1994) |
942 | Kari Köster-Lösche: Die Hakima (2006) |
pages | author: title (year) |
---|---|
405 | Wolfgang Held: Traum vom Hungerturm (2007) |
295 | Michael Donhauser: Livia oder die Reise (2004) |
282 | Harry Mathews: Mein Leben als CIA (2006) |
215 | Arno Camenisch: Sez Ner (2009) |
pages | author: title (year) |
---|---|
1035 | Dietmar Dath: Für immer in Honig (2008) |
815 | Chaim Noll: Der Kitharaspieler (2008) |
701 | Rudolf Lorenzen: Alles andere als ein Held (2014) |
686 | Rudolf Lorenzen: Alles andere als ein Held (2007) |
583 | Peter O. Chotjewitz: Mein Freund Klaus (2014) |
576 | Peter O. Chotjewitz: Mein Freund Klaus (2007) |
543 | Christian Geissler: Das Brot mit der Feile (2016) |
447 | Chaim Noll: Die Synagoge (2014) |
414 | Rudolf Lorenzen: Die Beutelschneider (2007) |
340 | Barbara Kirchner; Dietmar Dath: Schwester Mitternacht (2002) |
330 | Dietmar Dath: Am blinden Ufer (2010) |
317 | Enno Stahl: Winkler, Werber (2012) |
316 | Karl-Ludwig Wetzig: Windzeit, Wolfszeit (2011) |
315 | Georg Kreisler: Ein Prophet ohne Zukunft (2011) |
299 | Nino Kharatishvili: Juja (2010) |
283 | Gisela Elsner: Fliegeralarm (2009) |
274 | Dietmar Dath: Phonon oder Staat ohne Namen (2004) |
265 | Enno Stahl: Diese Seelen (2008) |
255 | Gunnar Gunnarsson: Vikivaki (2011) |
253 | Barbara Kirchner: Die verbesserte Frau (2012) |
pages | author: title (year) |
---|---|
399 | Viktar Martsinovich: Paranoia (2014) |
394 | Viktar Martsinovich: Mova (2016) |
317 | Tobias Herre: Das Fehlerchen (2012) |
281 | Volker Surmann: Extremely cold water (2014) |
273 | Edo Popović: Die Spieler (2009) |
203 | Volker Strübing: Das Paradies am Rande der Stadt (2013) |
172 | Sarah Bosetti: Mein schönstes Ferienbegräbnis (2015) |
171 | Marion Pfaus: Aus den Memoiren einer Verblühenden (2006) |
139 | Michael Stauffer: Ansichten eines alten Kamels (2014) |
pages | author: title (year) |
---|---|
597 | Karl Mickel: Lachmunds Freunde (2006) |
509 | Patrick Roth: Sunrise (2012) |
447 | Yi Mun-yol: Dem Kaiser! (2008) |
395 | Stefanie von Schnurbein: Krisen der Männlichkeit (2001) |
389 | Ernst Glaeser: Jahrgang 1902 (2013) |
356 | Clemens Berger: Das Streichelinstitut (2010) |
329 | Ulf Erdmann Ziegler: Hamburger Hochbahn (2007) |
320 | Markus Gasser: Die Sprengung der platonischen Höhle (2007) |
296 | Ulrike Kolb: Yoram (2009) |
294 | Svealena Kutschke: Etwas Kleines gut versiegeln (2009) |
287 | Maja Haderlap: Engel des Vergessens (2011) |
280 | Hugo Dittberner: Wolken und Vögel und Menschentränen (1995) |
278 | Claire Goll: Arsenik (2005) |
276 | Gabriele Kögl: Vorstadthimmel (2011) |
272 | Ralph Dutli: Die Liebenden von Mantua (2015) |
270 | Ralph Dutli: Soutines letzte Fahrt (2013) |
259 | Jörg Albrecht: Beim Anblick des Bildes vom Wolf (2012) |
253 | Lot Vekemans: Ein Brautkleid aus Warschau (2016) |
247 | Sybren Polet: Die andere Stadt (1999) |
247 | Romualdas Granauskas: Das Strudelloch (2010) |
pages | author: title (year) |
---|---|
384 | Monika Böss: Marvins Bräute (2005) |
379 | Norbert Schmid: Norm_372n (2008) |
377 | Wolfgang Dahms: Das richtige Wort (2007) |
315 | Norbert Schmid: Marlies (2003) |
310 | Hartmut Löffel: Schmerzpunkte oder die Kunst, zu überleben (2011) |
309 | Armin Strohmeyr: Dame mit rotem Kater (2015) |
304 | Gyde Callesen: Angst hat die Quersumme 5 (2013) |
303 | Karl-Heinz Schreiber: Der Meerschwimmer oder Heimat für Blumberg (2005) |
241 | Norbert Schmid: Der Tote im Park (1999) |
235 | Rüdiger Heins: In Schweigen gehüllt (2014) |
202 | Wolfgang Dahms: Die Abwendung (2008) |
197 | Klaus Brunn: Blindgänger - ein Familienidyll (2007) |
194 | Silke Heimes: Wie Nietzsche wurde, wer er war (2013) |
184 | Michael Maria Kroehn: Scarlet Red (2009) |
154 | Michael Mäde: Spiel mit Maurice (2001) |
153 | Silke Heimes: Die Geigerin (2009) |
146 | Silke Heimes: Der Antiquar (2010) |
143 | Ralf Schwob: Geschlossene Station (2003) |
140 | Eckhard Erxleben: Die Haut der Platane (2004) |
129 | Dieter Günther: Blühende Landschaften (1999) |