This is very cool! For the name extraction, how are you handling false positives across such a large dataset? I’m assuming there are mentions that could be a name but are actually just a noun. For example, Agricola being the word for farmer but also a name.
This looks really nice! I'm not a bookseller so I can't speak to the value props, but it's clearly coming from a well-informed position based on your background.