Java: Apache POI: puis-je obtenir propre texte à partir de MS Word (.doc) des fichiers?
Les cordes je suis (par programmation) prise de fichiers MS Word lors de l'utilisation d'Apache POI ne sont pas le même texte, je peux regarder quand j'ouvre les fichiers avec MS Word.
Lorsque vous utilisez le code suivant:
File someFile = new File("some\\path\\MSWFile.doc");
InputStream inputStrm = new FileInputStream(someFile);
HWPFDocument wordDoc = new HWPFDocument(inputStrm);
System.out.println(wordDoc.getText());
la sortie est une seule ligne avec beaucoup de "non valide" des personnages (oui, les "boîtes"), et de nombreux indésirables des chaînes, comme "FORMTEXT
", "HYPERLINK \l "_Toc##########"
" ('#' étant des chiffres), "PAGEREF _Toc########## \h 4
", etc.
Le code suivant "résout" le seul problème de lignes, mais conserve tous les caractères invalides et le texte non désiré:
File someFile = new File("some\\path\\MSWFile.doc");
InputStream inputStrm = new FileInputStream(someFile);
WordExtractor wordExtractor = new WordExtractor(inputStrm);
for(String paragraph:wordExtractor.getParagraphText()){
System.out.println(paragraph);
}
Je ne sais pas si je suis sur la mauvaise méthode pour extraire le texte, mais c'est ce que j'ai trouvé lors de la recherche à POI guide de. Si j'y suis, quelle est la bonne approche?
Si cette sortie est correcte, est-il un moyen standard pour se débarrasser de l'indésirable texte, ou devrai-je écrire un filtre de mon propre?
OriginalL'auteur XenoRo | 2012-04-20
Vous devez vous connecter pour publier un commentaire.
Il y a deux options, l'une fournie directement dans Apache POI, les autres par l'intermédiaire de Apache Tika (qui utilise Apache POI en interne).
La première option est d'utiliser
WordExtractor
, mais l'envelopper dans un appel àstripFields(String)
lors de l'appel. Qui permet de supprimer le texte des champs inclus dans le texte, des choses comme lien HYPERTEXTE que vous avez vu. Votre code devient:L'autre option est d'utiliser Apache Tika. Tika offre d'extraction de texte et les métadonnées, pour une grande variété de fichiers, de sorte que le même code fonctionne pour .doc, .docx, .pdf et de beaucoup d'autres. Pour obtenir propre, plaine de texte de votre document word (vous pouvez également obtenir XHTML si vous préférez), vous pourriez faire quelque chose comme:
Je vous suggère de commencer par le plus récent Tika version 1.3. Si le problème persiste, s'il vous plait augmenter d'un bug et de télécharger un fichier d'exemple de montrer, afin que nous puissions enquêter!
Ce qui se passe encore dans Tika 1.3 pour moi, pour ce que ça vaut.
Vous serez mieux de soumettre un rapport de bogue à l'encontre de Apache Tika ensuite, et d'inclure un fichier qui montre le problème
OriginalL'auteur Gagravarr
Cette classe peut lire à la fois .doc et .les fichiers docx en Java. Pour cela, je suis en utilisant tika-app-1.2.jar:
De compilation:
À exécuter:
OriginalL'auteur Vyas
Essayer cela, fonctionne pour moi et c'est purement une PI de la solution. Vous aurez à chercher la HWPFDocument homologue. Assurez-vous que le document que vous lisez est antérieure à Word 97, sinon utiliser XWPFDocument comme je le fais.
Maintenant, si vous voulez que certaines pièces vous pouvez utiliser la getparagraphtext, mais ne pas utiliser le texte de l'extracteur, l'utiliser directement sur le paragraphe comme ce
OriginalL'auteur Steven Bellens