2010-02-17 3 views
3

Quel est un moyen fiable de compter automatiquement les caractères et/ou les mots dans un fichier .doc ou .docx?Obtenir de manière fiable un nombre de caractères pour les fichiers .doc

La seule exigence réelle est un nombre raisonnablement précis et raisonnablement fiable.
Il doit fonctionner avec des documents contenant autre chose que du script latin, donc compter les caractères est suffisant pour la plupart des cas.
Le nombre ne doit pas forcément correspondre à celui de Word, mais le plus proche est le meilleur.
Puisqu'il y a une quantité d'applications différentes qui peuvent générer des fichiers .doc, il est correct de ne rien compter, mais ce cas doit être attrapable afin que nous sachions qu'un nombre peut être inexact. Pour tous les autres cas, le compte doit être, disons, précis à au moins 99% au moins 99% du temps.

Je suis ouvert quant aux technologies impliquées, mais quelque chose qui peut fonctionner sur une ligne de commande * NIX serait grandement préféré.

Existe-t-il une solution raisonnable pour cela?

+0

Vous pouvez utiliser wvSummary (http://linux.die.net/man/1/wvsummary) si vous pouvez compter le dernier enregistrement par Word (ou au moins un programme qui enregistre les métadonnées Word). –

+0

@Matthew Malheureusement, s'appuyer sur des métadonnées dans les fichiers eux-mêmes est exactement ce qui est trop peu fiable. :) – deceze

+0

pouvez-vous installer le mot sur une machine Windows quelque part dans votre réseau et juste utiliser Word lui-même (via certains COM ou VBA) pour obtenir le compte exact? –

Répondre

3

Voici un link pour certains convertisseurs de mots à texte Linux.

Par exemple, vous pouvez utiliser

antiword file.doc | wc 

pour faire le comptage.

Edit:

Cette link montre que AbiWord dispose d'une interface de ligne de commande, que vous pouvez utiliser pour convertir le format .docx Txt puis compter les mots en utilisant « wc ». AbiWord prend en charge le format docx

+0

Antiword a l'air plutôt bien, merci. Toute solution pour les fichiers .docx cependant? – deceze

+0

AbiWord pourrait être le chemin à parcourir. – beny23

0

Microsoft a publié un specification pour les formats de fichiers binaires Office. L'analyse d'un fichier .DOC n'a pas l'air triviale, mais avec un peu de soin, vous devriez pouvoir obtenir un résultat fiable et reproductible. Je n'ai aucune idée à quel point cela correspondra à ce que Word montre - cela dépendra probablement (au moins en partie) de la façon dont vous définissez "mot" - par exemple, si vous considérez un groupe de chiffres comme un "mot" . Cela ne prendra probablement pas beaucoup de temps pour comprendre comment Word traite les cas comme celui-là, alors une bonne relation ne devrait pas être très difficile.

+0

Je n'ai pas l'intention d'écrire mon propre analyseur .doc, merci beaucoup. http://www.joelonsoftware.com/items/2008/02/19.html :-) – deceze

0

Si vous considérez les applications en ligne comme une solution, oui, il existe une solution.
Ce pas si joli (en ce qui concerne la conception) le site offre à la fois la parole et le nombre de caractère: http://allworldphone.com/count-words-characters.htm

Je ne pense pas qu'il y ait une limite, et il ne devrait pas être un problème pour simplement copier/coller le contenu de vos documents dans la zone de texte correspondante et voir le résultat.

En ce qui concerne la précision de 100% ou 99%, vous pouvez la tester avec quelques-uns (20-50 mots) en les comptant vous-même en premier.

J'espère que cette aide. Cordialement. Chris

+2

Je pense que le problème principal est d'obtenir le texte brut hors du document Word sans mot d'ouverture (qui est ce que deceze aurait à faire pour couper et coller le contenu) – beny23

1

Mac OS X prend en charge la lecture des fichiers de mots intégrés aux architectures système, donc si vous en avez, c'est facile. échantillon MacRuby:

NSSpellChecker.sharedSpellChecker.countWordsInString(NSAttributedString.alloc.initWithURL(fileURL, documentAttributes:nil), language:nil) 

Plus portably - si elle donne le soutien pour docx - vous pouvez simplement obtenir Antiword et faire antiword | wc -w.

+0

Cela pourrait être une solution, mais probablement difficile à utiliser dans la production (Serveur Linux). Je vais regarder dans si ... – deceze

Questions connexes