Question

donnant une table de base de données avec des données énormes, quelle est la meilleure pratique pour supprimer le texte de bruit tel que:

  • fghfghfghfg
  • qsdqsdqsd
  • rtyrtyrty

que le bruit est stocké dans le champ « nom ».

Je travaille sur des données avec Java structures standard.

Était-ce utile?

La solution

Eh bien, vous pouvez construire un classificateur en utilisant des méthodes de la PNL, et former sur des exemples de bruit et sans bruit. Un cas de que vous pouvez prendre est le détecteur de langue d'Apache Tika. Si le détecteur de langage dit « me bat » qui pourrait être assez bon.

Autres conseils

Suppression des choses comme ça est pas aussi facile que cela puisse paraître.

Pour nous, les humains, il est facile de voir que « djkhfkjh » ne fait aucun sens. Mais comment un ordinateur détecte ce genre de bruit? Comment serait-il savoir que « Eyjafjallajökull » est quelqu'un juste fracassant son clavier, ou la montagne la plus overbuzzed au cours des deux dernières années?

Vous ne pouvez pas faire cela de manière fiable sans beaucoup de faux positifs, donc après tout, il est de filtrer les faux positifs et vrais positifs à la main à nouveau.

Obtenir un dictionnaire avec autant de noms que vous pouvez trouver et filtrer vos données pour afficher celles qui ne sont pas dans le dictionnaire. Ensuite, vous devez les supprimer un par un pour vous assurer de ne pas supprimer des données valides. Tri de la liste par nom peut vous aider à supprimer plusieurs lignes à la fois.

Si le reste du texte est l'anglais, vous pouvez utiliser une liste de mots. Si plus d'un pourcentage donné (disons 50%) des mots dans le texte ne sont pas dans la liste de mots, il est sans doute du bruit.

Vous pouvez définir un seuil, disons, 5 mots, pour empêcher la suppression de messages comme « LOL ».

Sur la plupart des installations Linux, vous pouvez extraire une liste de mots du correcteur orthographique aspell comme ceci:

aspell --lang en dump master

Vous allez avoir besoin de commencer par définir « texte de bruit » plus efficacement. La définition du problème est la partie difficile ici. Vous ne pouvez pas écrire du code qui va dire: « se débarrasser des chaînes qui sont un peu comme _____. » On dirait que le modèle que vous avez identifié est « un ensemble cohérent de trois caractères d'affilée, et les répétitions réglées au moins une fois, mais ne peut pas mettre fin à proprement (il pourrait mettre fin à un caractère à partir du milieu de l'ensemble). »

Maintenant écrire une expression régulière qui correspond à ce modèle, et le tester.

Mais je parie qu'il ya d'autres modèles que vous cherchez ...

Vérifier chaque mot et voir à quel point la redondance est là. S'il y a plus de trois groupes répétés consécutifs de lettres, il est un bon candidat pour le bruit. En outre, chercher des groupes de lettres qui ne font généralement pas ensemble et pour les groupes de lettres consécutives qui sont également consécutives sur le clavier. Si l'on fait un mot entier de ces lettres qui sont voisins du clavier, il réclame aussi une place sur la liste de bruit.

La formation d'un classificateur PNL serait probablement la meilleure façon d'aller. Cependant, une méthode plus simple est peut-être simplement vérifier que chaque mot existe dans une liste de tous les mots connus « valides ». La plupart des systèmes Unix ont un fichier appelé / usr / share / dict / mots que vous pouvez utiliser à cet effet. De plus, Ubuntu se développe sur ce point avec / usr / share / dict / american-anglais, / usr / share / dict / american-grand, et / usr / share / dict / american-fou, chaque liste plus complète puis la dernière. Ces listes comprennent aussi beaucoup de fautes d'orthographe courantes, de sorte que vous ne filtrer le texte qui est techniquement un mot, mais clairement reconnaissable comme un mot.

Si vous êtes vraiment ambitieux, vous pouvez combiner ces approches, et d'utiliser ces listes de mots pour former un classificateur Entropy bayésien ou maximum.

Il y a beaucoup de bonnes réponses ici. Lequel (s) va travailler pour vous dépend beaucoup des spécificités de votre problème -. Par exemple, est l'entrée censé être des mots anglais, noms d'utilisateur, noms de famille des gens, etc

Une approche: écrire un programme pour analyser ce que vous considérez comme entrée « valide ». Gardez une trace de la fréquence possible chaque séquence de trois lettres apparaît dans le texte légitime. Ensuite, lorsque vous avez entrée pour vérifier, regardez chaque séquence de trois lettres de l'entrée et rechercher la fréquence attendue. Quelque chose comme « xzt » a probablement une fréquence proche de zéro. Si vous avez trop de séquences comme ça, marquer comme déchets.

Problèmes avec ceci:

  1. Vous pourriez traiter la mauvaise orthographe comme déchets, par exemple, si quelqu'un oublie de mettre un « u » après un « q » en un mot.
  2. Vous n'attrapera pas entrée comme "thethethethe".

Shove les morceaux de texte dans Google et voir combien de résultats que vous obtenez.

Exemples # 1 et # 2 peut être éliminé par un analyseur qui essaie de comprendre comment prononcer le texte. Quelle que soit la langue qu'ils sont innommable et donc pas de mots.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top