5 ms·
If you accept running Java, the Apache Tika is extremely good at parsing content (https://tika.apache.org/ https://tika.apache.org/)
by agadius 3y ago
If you accept running Java, the Apache Tika is extremely good at parsing content (https://tika.apache.org/ https://tika.apache.org/)
- convivialdingo 3y agoI second this suggestion. I tested numerous Python tools to extract text - nothing matches Tika for general extraction of just about any data format. However - if you can expect a certain format beforehand - then Python is better since you can extract higher-quality data (tables, lists) with the appropriate tool.
- saeedesmaili 3y agoDo you have any suggestions for Python libraries (other than what's mentioned in the post)?
- convivialdingo 3y agoI've had good luck with python-docx for reading word documents (typically specifications). Tables are supported - but it's not obvious where the table comes from in the document and I had to come up with a hack way to read image captions. PDF has been hit or miss, but pypdf has improved in the last couple of years. Depending on the document you'll sometimes get random spaces or nospacesatall.
- saeedesmaili 3y agoI tried python-docx with a bunch of docx files (downloaded from Google Docs). It returns empty strings for hyperlinks and I couldn't manage to fix this. So if there is a sentence like "This is an important link to another doc or url." and the "link" is a hyperlink, python-docx returns "This is an important to another doc or url."
- icegreentea2 3y agoHeh, I got a bit into hacking on python-docx last year (the original author seems to be focusing on other things than python-docx now) - I have a fork/branch where I tried to more properly implement external hyperlink functionality (https://github.com/icegreentea/python-docx/pull/7 https://github.com/icegreentea/python-docx/pull/7) I realize now staring at this, that I might have broken API a little. You can't do "text = paragraph.text" anymore, but you can do "text = ''.join([run.text for run in paragraph.runs])" instead. If you're curious at all why it breaks, it's because in the OOXML spec paragraphs are made up of a ordered list of runs or hyperlinks (and hyperlinks can then contain additional runs). The master branch just implements paragraphs as ordered list of runs (and ignores all hyperlinks).
- saeedesmaili 3y agoThis sounds amazing! Thanks for sharing it, I will try it to see if I can replace it with the main python-docx. For my use case it suffices to have full text of each paragraph (even if it includes a hyperlink) and heading but also be able to have each of them separated when needed.
- icegreentea2 3y agoActually, I just realized that I had provided a 'one-off' hack to a similarish situation here: https://github.com/python-openxml/python-docx/issues/1123#issuecomment-1198593723 https://github.com/python-openxml/python-docx/issues/1123#is... Replace the `qn("w:ins")` in the example with `qn("w:hyperlink")` and that should hopefully work?
- convivialdingo 3y agoHey, that's fantastic. I'll definitely check that out.
- mcswell 3y agoTika can be used as a library in Python: https://pypi.org/project/tika/ https://pypi.org/project/tika/
- ramraj07 3y agoAs is customary for all of Apache, I have no clue what I’m looking at after trying to read through the links in that page for ten minutes. Like who is this tool for? When should I use this vs any other competing tools? No clue. I suppose it can read documents of any type and give it out as a dictionary? Why would I use this vs pandas?
- mbwgh 3y agoI second this, there is absolutely no easily discoverable entry point to the documentation. In the end if you want to get a feeling of what this is you search for "tika tutorial" and get a rough idea via (in my case) some medium article I guess.
- mcswell 3y agoThere's a book called "Tika in action" which I found useful.
- mcswell 3y agoI can't speak to the Apache documentation, but I once had the task of extracting plain text from many different document formats: Word, spreadsheets, PDFs, the EXIF information in JPEGs, and so on for a long list. I had written code with calls to extractor libraries for several of these formats, when I can across tika. Out when my if..then..elif..elif..elif.. code, to be replaced with a single (Python) call to tika. I can't answer your question about pandas, though.
- jghn 3y agoI found myself today trying to parse a TSV and substituting a few fields with a different value, then writing the new file out. Something that perl would excel at, although I used Python. Because Perl isn't as maintainable as Python I was intrigued by this comment. A JVM solution would also be viable in my tech stack. Would Tika be easier than line processing compiled regexes in Python? I tried looking at the Usage examples but it wasn't clear.