2016-10-14 3 views
0

J'essaie d'écrire un algorithme qui peut résoudre l'imprévu ou la complexité de l'information d'une phrase. Plus précisément, j'essaie de trier un ensemble de phrases afin que les moins complexes viennent en premier. Ma pensée était que je pourrais utiliser une bibliothèque de compression, comme zlib ?, "pré former" sur un grand corpus de texte dans la même langue (appelez ceci le "Corpus"), puis ajouter à ce corpus de texte les différentes phrases.Utiliser la bibliothèque de compression pour estimer la complexité de l'information d'une phrase en anglais?

Ainsi, je pourrais définir la mesure de complexité d'une phrase comme le nombre d'octets dont elle a besoin pour compresser le corpus entier avec cette phrase ajoutée, par rapport à l'ensemble du corpus avec une phrase différente. (Moins il y a d'octets supplémentaires, plus la phrase est prévisible ou «attendue», et donc plus la complexité est faible). Cela a-t-il du sens?

Le problème est d'essayer de trouver la bonne bibliothèque qui me permettra de le faire, de préférence à partir de python. Je pourrais le faire en ajoutant littéralement des phrases à un grand corpus et en demandant à une bibliothèque de compression de comprimer tout le shebang, mais si possible, je préfèrerais arrêter le traitement de la bibliothèque de compression à la fin du corpus, prenez un instantané de l'état de compression approprié, puis, avec tout ce 'état' disponible, essayez de compresser la phrase finale. (Je reviendrai ensuite à l'instantané de l'état à la fin du corpus et j'essaierai une phrase différente).

Quelqu'un peut-il m'aider avec une bibliothèque de compression qui pourrait convenir à ce besoin? (Quelque chose qui me permet de 'geler' son état après 'pré-entraînement'.)

Je préfère utiliser une bibliothèque que je peux appeler depuis Python, ou Scala. Encore mieux si c'est du pur python (ou du pur scala)

Répondre

1

Tout ce que vous allez faire c'est de vous dire si les mots de la phrase, et peut-être les phrases de la phrase, sont dans le dictionnaire que vous avez fourni. Je ne vois pas comment c'est la complexité. Plus comme niveau de qualité. Et il y a de meilleurs outils pour ça. Quoi qu'il en soit, je vais répondre à votre question.

Oui, vous pouvez prédéfinir le compresseur zlib dans un dictionnaire. Tout ce qu'il est est jusqu'à 32K octets de texte. Vous n'avez pas besoin d'exécuter zlib sur le dictionnaire ou de "geler un état" - vous commencez simplement à compresser les nouvelles données, mais vous permettez de regarder le dictionnaire pour trouver les chaînes correspondantes. Cependant 32K n'est pas beaucoup. C'est aussi loin que le format de déflatage de zlib ressemblera, et vous ne pouvez pas charger une grande partie de la langue anglaise en 32K octets.

LZMA2 permet également un dictionnaire prédéfini, mais il peut être beaucoup plus grand, jusqu'à 4 Go. Il existe une liaison Python pour la bibliothèque LZMA2, mais vous devrez peut-être l'étendre pour fournir la fonction de préréglage du dictionnaire.

+0

Merci beaucoup d'avoir pris le temps. Vous avez peut-être raison de dire que ce n'est peut-être pas intéressant, mais je vais essayer un peu plus. Je suis d'accord qu'avec seulement 32K de 'dictionnaire' ce n'est peut-être pas très intéressant, mais penser qu'un dictionnaire bien optimisé, même s'il ne contient que quelques 'patterns', pourrait vous en dire un peu plus sur les phrases qui utilisent le structures les plus communes, par rapport aux autres. Même PySmaz un jeune minuscule 256 * entrée * dictionnaire ne pas des choses totalement sans signification https://github.com/CordySmith/PySmaz/blob/master/smaz/__init__.py#L295 montrent qu'il est – utunga