2016-04-16 16 views
0

私はrtfファイルを持っています。そこにはたくさんのテーブルがあります。私はテーブルを抽出するためにJava(POIとtika)を使用しようとしています。テーブルがそのように定義されている.docでは、これは簡単です。しかし、rtfファイルでは、メタデータの一部として「this is a table」タグは存在しないようです。誰かがそのようなファイルからテーブルを抽出するための最良の戦略を知っていますか?それを別のファイル形式のヘルプに変換しますか?私を見上げる手がかりは?rtfテーブルを抽出するには

答えて

1

unrtfと呼ばれるLinuxのツールを使用すると、HTMLにあなたのRTFファイルを変換することができアプリをmanual

を見て、あります:

unrtf --html your_input_file.rtf > your_output_file.html 

今、あなたは、HTML /の操作のための任意のプログラミングAPIを使用することができます簡単にテーブルを抽出することができます。あなたはそれで十分ですか?

0

回答ありがとうございました。最終的に私はTXTParserを使ってTikaを使って、すべてのセグメントを大胆なタグ(私のテーブルがどのように分離されているか)の間にarraylistに置くことができました。そこからテーブルを定義するためにタブセパレータを使用しなければなりませんでした。 タブに基づいてテーブルを抽出するビットがないコードを次に示します(まだ動作しています):

import java.io.File; 
import java.io.FileInputStream; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

import org.apache.tika.exception.TikaException; 
import org.apache.tika.metadata.Metadata; 
import org.apache.tika.metadata.TikaCoreProperties; 
import org.apache.tika.parser.ParseContext; 
import org.apache.tika.parser.html.HtmlParser; 
import org.apache.tika.parser.rtf.RTFParser; 
import org.apache.tika.parser.txt.TXTParser; 
import org.apache.tika.sax.BodyContentHandler; 
import org.xml.sax.SAXException; 


public class TextParser { 
public static void main(final String[] args) throws IOException,TikaException{ 
//detecting the file type 
BodyContentHandler handler = new BodyContentHandler(-1); 
Metadata metadata = new Metadata(); 

FileInputStream inputstream = new FileInputStream(new File("/Users/mydoc.rtf")); 
ParseContext pcontext = new ParseContext(); 

//Text document parser 
TXTParser TXTParser = new TXTParser(); 
try { 
    TXTParser.parse(inputstream, handler, metadata,pcontext); 

} catch (SAXException e) { 

    e.printStackTrace(); 
} 
String s=handler.toString(); 

Pattern pattern = Pattern.compile("(\\\\b\\\\f1\\\\fs24.+?\\\\par .+?)\\\\b\\\\f1\\\\fs24.*?\\{\\\\",Pattern.DOTALL); 

Matcher matcher = pattern.matcher(s); 
ArrayList<String> arr= new ArrayList<String>(); 

while (matcher.find()) { 
     arr.add(matcher.group(1)); 
    } 

for(String name : arr){ 
    System.out.println("The array number is: "+arr.indexOf(name)+" \n\n "+name); 
} 

} 
} 
関連する問題