mirror of
https://github.com/deepset-ai/haystack.git
synced 2025-08-11 01:57:48 +00:00

* first draft / notes on new primitives * wip label / feedback refactor * rename doc.text -> doc.content. add doc.content_type * add datatype for content * remove faq_question_field from ES and weaviate. rename text_field -> content_field in docstores. update tutorials for content field * update converters for . Add warning for empty * renam label.question -> label.query. Allow sorting of Answers. * WIP primitives * update ui/reader for new Answer format * Improve Label. First refactoring of MultiLabel. Adjust eval code * fixed workflow conflict with introducing new one (#1472) * Add latest docstring and tutorial changes * make add_eval_data() work again * fix reader formats. WIP fix _extract_docs_and_labels_from_dict * fix test reader * Add latest docstring and tutorial changes * fix another test case for reader * fix mypy in farm reader.eval() * fix mypy in farm reader.eval() * WIP ORM refactor * Add latest docstring and tutorial changes * fix mypy weaviate * make label and multilabel dataclasses * bump mypy env in CI to python 3.8 * WIP refactor Label ORM * WIP refactor Label ORM * simplify tests for individual doc stores * WIP refactoring markers of tests * test alternative approach for tests with existing parametrization * WIP refactor ORMs * fix skip logic of already parametrized tests * fix weaviate behaviour in tests - not parametrizing it in our general test cases. * Add latest docstring and tutorial changes * fix some tests * remove sql from document_store_types * fix markers for generator and pipeline test * remove inmemory marker * remove unneeded elasticsearch markers * add dataclasses-json dependency. adjust ORM to just store JSON repr * ignore type as dataclasses_json seems to miss functionality here * update readme and contributing.md * update contributing * adjust example * fix duplicate doc handling for custom index * Add latest docstring and tutorial changes * fix some ORM issues. fix get_all_labels_aggregated. * update drop flags where get_all_labels_aggregated() was used before * Add latest docstring and tutorial changes * add to_json(). add + fix tests * fix no_answer handling in label / multilabel * fix duplicate docs in memory doc store. change primary key for sql doc table * fix mypy issues * fix mypy issues * haystack/retriever/base.py * fix test_write_document_meta[elastic] * fix test_elasticsearch_custom_fields * fix test_labels[elastic] * fix crawler * fix converter * fix docx converter * fix preprocessor * fix test_utils * fix tfidf retriever. fix selection of docstore in tests with multiple fixtures / parameterizations * Add latest docstring and tutorial changes * fix crawler test. fix ocrconverter attribute * fix test_elasticsearch_custom_query * fix generator pipeline * fix ocr converter * fix ragenerator * Add latest docstring and tutorial changes * fix test_load_and_save_yaml for elasticsearch * fixes for pipeline tests * fix faq pipeline * fix pipeline tests * Add latest docstring and tutorial changes * fix weaviate * Add latest docstring and tutorial changes * trigger CI * satisfy mypy * Add latest docstring and tutorial changes * satisfy mypy * Add latest docstring and tutorial changes * trigger CI * fix question generation test * fix ray. fix Q-generation * fix translator test * satisfy mypy * wip refactor feedback rest api * fix rest api feedback endpoint * fix doc classifier * remove relation of Labels -> Docs in SQL ORM * fix faiss/milvus tests * fix doc classifier test * fix eval test * fixing eval issues * Add latest docstring and tutorial changes * fix mypy * WIP replace dataclasses-json with manual serialization * Add latest docstring and tutorial changes * revert to dataclass-json serialization for now. remove debug prints. * update docstrings * fix extractor. fix Answer Span init * fix api test * keep meta data of answers in reader.run() * fix meta handling * adress review feedback * Add latest docstring and tutorial changes * make document=None for open domain labels * add import * fix print utils * fix rest api * adress review feedback * Add latest docstring and tutorial changes * fix mypy Co-authored-by: Markus Paff <markuspaff.mp@gmail.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
71 lines
2.6 KiB
Python
71 lines
2.6 KiB
Python
from pathlib import Path
|
|
|
|
import pytest
|
|
|
|
from haystack.file_converter import MarkdownConverter
|
|
from haystack.file_converter.docx import DocxToTextConverter
|
|
from haystack.file_converter.pdf import PDFToTextConverter, PDFToTextOCRConverter
|
|
from haystack.file_converter.tika import TikaConverter
|
|
|
|
|
|
@pytest.mark.tika
|
|
@pytest.mark.parametrize(
|
|
# "Converter", [PDFToTextConverter, TikaConverter, PDFToTextOCRConverter]
|
|
"Converter", [PDFToTextOCRConverter]
|
|
)
|
|
def test_convert(Converter, xpdf_fixture):
|
|
converter = Converter()
|
|
document = converter.convert(file_path=Path("samples/pdf/sample_pdf_1.pdf"))
|
|
pages = document["content"].split("\f")
|
|
assert len(pages) == 4 # the sample PDF file has four pages.
|
|
assert pages[0] != "" # the page 1 of PDF contains text.
|
|
assert pages[2] == "" # the page 3 of PDF file is empty.
|
|
# assert text is retained from the document.
|
|
# As whitespace can differ (\n," ", etc.), we standardize all to simple whitespace
|
|
page_standard_whitespace = " ".join(pages[0].split())
|
|
assert (
|
|
"Adobe Systems made the PDF specification available free of charge in 1993."
|
|
in page_standard_whitespace
|
|
)
|
|
|
|
|
|
@pytest.mark.tika
|
|
@pytest.mark.parametrize("Converter", [PDFToTextConverter, TikaConverter])
|
|
def test_table_removal(Converter, xpdf_fixture):
|
|
converter = Converter(remove_numeric_tables=True)
|
|
document = converter.convert(file_path=Path("samples/pdf/sample_pdf_1.pdf"))
|
|
pages = document["content"].split("\f")
|
|
# assert numeric rows are removed from the table.
|
|
assert "324" not in pages[0]
|
|
assert "54x growth" not in pages[0]
|
|
|
|
|
|
@pytest.mark.tika
|
|
@pytest.mark.parametrize("Converter", [PDFToTextConverter, TikaConverter])
|
|
def test_language_validation(Converter, xpdf_fixture, caplog):
|
|
converter = Converter(valid_languages=["en"])
|
|
converter.convert(file_path=Path("samples/pdf/sample_pdf_1.pdf"))
|
|
assert (
|
|
"The language for samples/pdf/sample_pdf_1.pdf is not one of ['en']."
|
|
not in caplog.text
|
|
)
|
|
|
|
converter = Converter(valid_languages=["de"])
|
|
converter.convert(file_path=Path("samples/pdf/sample_pdf_1.pdf"))
|
|
assert (
|
|
"The language for samples/pdf/sample_pdf_1.pdf is not one of ['de']."
|
|
in caplog.text
|
|
)
|
|
|
|
|
|
def test_docx_converter():
|
|
converter = DocxToTextConverter()
|
|
document = converter.convert(file_path=Path("samples/docx/sample_docx.docx"))
|
|
assert document["content"].startswith("Sample Docx File")
|
|
|
|
|
|
def test_markdown_converter():
|
|
converter = MarkdownConverter()
|
|
document = converter.convert(file_path=Path("samples/markdown/sample.md"))
|
|
assert document["content"].startswith("What to build with Haystack")
|