如何使用 Apache Tika 使用 Apache Metadata class 提取 "From"、"To" 和 "Subject" 字段?
How to use Apache Tika to extract the "From", "To", and "Subject" fields by using Apache Metadata class?
我正在使用 Apache Tika 库,特别是元数据 class,以
从 Outlook Exchange 文件(电子邮件文件,即 .msg
文件)中提取 "From" 、 "To" 和 "Subject" 字段。
我知道我需要使用元数据 class,但我在使用它时遇到了一些麻烦。
到目前为止,这是我的代码:
import java.io.File;
import java.io.*;
import java.util.Arrays;
import org.apache.tika.Tika;
/* more tika imports */
public class ExtractFromEmail {
public static void main(final String[] args) throws IOException, TikaException , SAXException {
File file = new File("message_1980.msg");
AutoDetectParser parser = new AutoDetectParser();
BodyContentHandler handler = new BodyContentHandler(-1);
Metadata tikaMetadata = new Metadata();
Property prop = new Property("MESSAGE_FROM");
String fromField = tikaMetadata.get(prop); // USE THIS PATTERN
InputStream input = TikaInputStream.get(file, tikaMetadata);
parser.parse(input, handler, tikaMetadata, new ParseContext());
String other = tikaMetadata.MESSAGE_FROM ;
System.out.println(fromField);
}
}
当我 运行 代码时出现以下错误:
ExtractFromEmail.java:30: error: no suitable constructor found for
Property(String)
Property prop = new Property("Message.MESSAGE_FROM");
谢谢
我用 tika-1.14 试试这个:
File file = new File("src/main/resources/unicode.msg");
AutoDetectParser parser = new AutoDetectParser();
BodyContentHandler handler = new BodyContentHandler();
Metadata tikaMetadata = new Metadata();
InputStream input = TikaInputStream.get(file, tikaMetadata);
parser.parse(input, handler, tikaMetadata, new ParseContext());
String messageFrom = tikaMetadata.MESSAGE_FROM;
String fromField = tikaMetadata.get(messageFrom);
System.out.println(fromField);
并且有效。您的问题是您试图在解析消息之前提取元数据。此外,我认为 Property prop = new Property("MESSAGE_FROM");
行是无用且不正确的。
我正在使用 Apache Tika 库,特别是元数据 class,以
从 Outlook Exchange 文件(电子邮件文件,即 .msg
文件)中提取 "From" 、 "To" 和 "Subject" 字段。
我知道我需要使用元数据 class,但我在使用它时遇到了一些麻烦。
到目前为止,这是我的代码:
import java.io.File;
import java.io.*;
import java.util.Arrays;
import org.apache.tika.Tika;
/* more tika imports */
public class ExtractFromEmail {
public static void main(final String[] args) throws IOException, TikaException , SAXException {
File file = new File("message_1980.msg");
AutoDetectParser parser = new AutoDetectParser();
BodyContentHandler handler = new BodyContentHandler(-1);
Metadata tikaMetadata = new Metadata();
Property prop = new Property("MESSAGE_FROM");
String fromField = tikaMetadata.get(prop); // USE THIS PATTERN
InputStream input = TikaInputStream.get(file, tikaMetadata);
parser.parse(input, handler, tikaMetadata, new ParseContext());
String other = tikaMetadata.MESSAGE_FROM ;
System.out.println(fromField);
}
}
当我 运行 代码时出现以下错误:
ExtractFromEmail.java:30: error: no suitable constructor found for Property(String) Property prop = new Property("Message.MESSAGE_FROM");
谢谢
我用 tika-1.14 试试这个:
File file = new File("src/main/resources/unicode.msg");
AutoDetectParser parser = new AutoDetectParser();
BodyContentHandler handler = new BodyContentHandler();
Metadata tikaMetadata = new Metadata();
InputStream input = TikaInputStream.get(file, tikaMetadata);
parser.parse(input, handler, tikaMetadata, new ParseContext());
String messageFrom = tikaMetadata.MESSAGE_FROM;
String fromField = tikaMetadata.get(messageFrom);
System.out.println(fromField);
并且有效。您的问题是您试图在解析消息之前提取元数据。此外,我认为 Property prop = new Property("MESSAGE_FROM");
行是无用且不正确的。