{ "cells": [ { "cell_type": "markdown", "id": "9fdbd55d", "metadata": {}, "source": [ "# Email\n", "\n", "This notebook shows how to load email (`.eml`) or `Microsoft Outlook` (`.msg`) files." ] }, { "cell_type": "markdown", "id": "89caa348", "metadata": {}, "source": [ "## Using Unstructured" ] }, { "cell_type": "code", "execution_count": null, "id": "226e50aa-407d-43d9-a81d-f6706298b10c", "metadata": { "tags": [] }, "outputs": [], "source": [ "#!pip install unstructured" ] }, { "cell_type": "code", "execution_count": 1, "id": "40cd9806", "metadata": { "tags": [] }, "outputs": [], "source": [ "from langchain.document_loaders import UnstructuredEmailLoader" ] }, { "cell_type": "code", "execution_count": 2, "id": "2d20b852", "metadata": { "tags": [] }, "outputs": [], "source": [ "loader = UnstructuredEmailLoader(\"example_data/fake-email.eml\")" ] }, { "cell_type": "code", "execution_count": 3, "id": "579fa702", "metadata": { "tags": [] }, "outputs": [], "source": [ "data = loader.load()" ] }, { "cell_type": "code", "execution_count": 4, "id": "90c1d899", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "[Document(page_content='This is a test email to use for unit tests.\\n\\nImportant points:\\n\\nRoses are red\\n\\nViolets are blue', metadata={'source': 'example_data/fake-email.eml'})]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data" ] }, { "cell_type": "markdown", "id": "8bf50cba", "metadata": {}, "source": [ "### Retain Elements\n", "\n", "Under the hood, Unstructured creates different \"elements\" for different chunks of text. By default we combine those together, but you can easily keep that separation by specifying `mode=\"elements\"`." ] }, { "cell_type": "code", "execution_count": 5, "id": "b9592eaf", "metadata": {}, "outputs": [], "source": [ "loader = UnstructuredEmailLoader(\"example_data/fake-email.eml\", mode=\"elements\")" ] }, { "cell_type": "code", "execution_count": 6, "id": "0b16d03f", "metadata": {}, "outputs": [], "source": [ "data = loader.load()" ] }, { "cell_type": "code", "execution_count": 7, "id": "d7bdc5e5", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Document(page_content='This is a test email to use for unit tests.', metadata={'source': 'example_data/fake-email.eml', 'filename': 'fake-email.eml', 'file_directory': 'example_data', 'date': '2022-12-16T17:04:16-05:00', 'filetype': 'message/rfc822', 'sent_from': ['Matthew Robinson '], 'sent_to': ['Matthew Robinson '], 'subject': 'Test Email', 'category': 'NarrativeText'})" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data[0]" ] }, { "cell_type": "markdown", "id": "5021f20a", "metadata": {}, "source": [ "### Processing Attachments\n", "\n", "You can process attachments with `UnstructuredEmailLoader` by setting `process_attachments=True` in the constructor. By default, attachments will be partitioned using the `partition` function from `unstructured`. You can use a different partitioning function by passing the function to the `attachment_partitioner` kwarg." ] }, { "cell_type": "code", "execution_count": 8, "id": "6539f166", "metadata": {}, "outputs": [], "source": [ "loader = UnstructuredEmailLoader(\n", " \"example_data/fake-email.eml\",\n", " mode=\"elements\",\n", " process_attachments=True,\n", ")" ] }, { "cell_type": "code", "execution_count": 9, "id": "aebead38", "metadata": {}, "outputs": [], "source": [ "data = loader.load()" ] }, { "cell_type": "code", "execution_count": 10, "id": "ddeb60f4", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Document(page_content='This is a test email to use for unit tests.', metadata={'source': 'example_data/fake-email.eml', 'filename': 'fake-email.eml', 'file_directory': 'example_data', 'date': '2022-12-16T17:04:16-05:00', 'filetype': 'message/rfc822', 'sent_from': ['Matthew Robinson '], 'sent_to': ['Matthew Robinson '], 'subject': 'Test Email', 'category': 'NarrativeText'})" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data[0]" ] }, { "cell_type": "markdown", "id": "6a074515", "metadata": {}, "source": [ "## Using OutlookMessageLoader" ] }, { "cell_type": "code", "execution_count": null, "id": "058e670e-9964-44ee-b888-44f23ffb9310", "metadata": {}, "outputs": [], "source": [ "#!pip install extract_msg" ] }, { "cell_type": "code", "execution_count": 8, "id": "1e7a8444", "metadata": {}, "outputs": [], "source": [ "from langchain.document_loaders import OutlookMessageLoader" ] }, { "cell_type": "code", "execution_count": 9, "id": "77a055e6", "metadata": {}, "outputs": [], "source": [ "loader = OutlookMessageLoader(\"example_data/fake-email.msg\")" ] }, { "cell_type": "code", "execution_count": 10, "id": "789882de", "metadata": {}, "outputs": [], "source": [ "data = loader.load()" ] }, { "cell_type": "code", "execution_count": 11, "id": "46aa0632", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Document(page_content='This is a test email to experiment with the MS Outlook MSG Extractor\\r\\n\\r\\n\\r\\n-- \\r\\n\\r\\n\\r\\nKind regards\\r\\n\\r\\n\\r\\n\\r\\n\\r\\nBrian Zhou\\r\\n\\r\\n', metadata={'subject': 'Test for TIF files', 'sender': 'Brian Zhou ', 'date': 'Mon, 18 Nov 2013 16:26:24 +0800'})" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data[0]" ] }, { "cell_type": "code", "execution_count": null, "id": "2b223ce2", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.13" } }, "nbformat": 4, "nbformat_minor": 5 }