Question

Les sujets d’évolution de Twitter se composent souvent de plus d’un mot. Mais pour les termes composés, il existe souvent différentes manières d’orthographier, par exemple:

"Prince de sang-mêlé" / "Prince de Sang-Mêlé"

Pour trouver toutes les mises à jour mentionnant un sujet tendance, vous devez connaître l'orthographe. Twitter fait ceci:

 Admin des sujets des tendances de Twitter

Vous avez le nom du sujet à gauche et les différentes manières d’orthographes à droite. Pensez-vous que cela se fait manuellement ou automatiquement? Est-il possible de le faire automatiquement? Si oui: comment?

J'espère que vous pourrez m'aider. Merci d'avance!

Était-ce utile?

La solution 2

Je vais essayer de répondre à ma propre question sur la base du commentaire de Broken Link (merci pour cela):

Vous avez extrait des phrases de 1 à 3 mots de votre base de données de documents. Parmi ces phrases extraites figurent les phrases suivantes:

  • Prince de sang mêlé
  • Prince de sang-mêlé
  • Prince sang-mêlé

Pour chaque phrase, vous supprimez tous les caractères spéciaux et les espaces vides, puis la chaîne est en minuscule:

$ phrase = 'Prince de sang-mêlé'; $ phrase = preg_replace ('/ [^ a-z] / i', '', $ phrase); $ phrase = strtolower ($ phrase); // le résultat est "halfbloodprince"

Lorsque vous avez terminé, les 3 phrases (voir ci-dessus) ont une orthographe commune:

  • Prince de sang-mêlé = > demi-sangprince
  • Prince de sang-mêlé = > demi-sangprince
  • Prince sang-mêlé = > demi-sangprince

So "halfbloodprince" est la phrase parent. Vous insérez les deux dans votre base de données, la phrase normale et la phrase parent.

Pour afficher un " Trending Topics Admin " comme Twitter, vous procédez comme suit:

// first select the top 10 parent phrases
$sql1 = "SELECT parentPhrase, COUNT(*) as cnt FROM phrases GROUP BY parentPhrase ORDER BY cnt DESC LIMIT 0, 10";
$sql2 = mysql_query($sql1);
while ($sql3 = mysql_fetch_assoc($sql2)) {
    $parentPhrase = $sql3['parentPhrase'];
    $childPhrases = array(); // set up an array for the child phrases
    $fifthPart = round($sql3['cnt']*0.2);
    // now select all child phrases which make 20% of the parent phrase or more
    $sql4 = "SELECT phrase FROM phrases WHERE parentPhrase = '".$sql3['parentPhrase']."' GROUP BY phrase HAVING COUNT(*) >= ".$fifthPart;
    $sql5 = mysql_query($sql4);
    while ($sql6 = mysql_fetch_assoc($sql5)) {
        $childPhrases[] = $sql3['phrase'];
    }
    // now you have the parent phrase which is on the left side of the arrow in $parentPhrase
    // and all child phrases which are on the right side of the arrow in $childPhrases
}

Est-ce ce à quoi vous pensiez, Broken Link? Cela fonctionnerait-il?

Autres conseils

Ce que vous voulez fondamentalement, c'est trouver la similitude entre deux chaînes de caractères .

Je pense que l'algorithme Soundex est ce que vous recherchez. Il peut être utilisé pour comparer des chaînes en fonction de leur sonorité. Ou comme le décrit wiki:

  

Soundex est un algorithme phonétique permettant d’indexer des noms par son, tel que prononcé en anglais. L’objectif est que les homophones soient encodés dans la même représentation, de sorte qu’ils puissent être appariés malgré des différences d’orthographe mineures.

Et:

  

Utilisation de cet algorithme [EDIT: c’est-à-dire "classement" mots par une lettre et trois chiffres], les deux "Robert" et " Rupert " renvoie la même chaîne " R163 " tandis que " Rubin " les rendements "R150". " Ashcraft " donne "A261".

Il existe également la la distance Levenshtein .

Bonne chance.

Il existe plusieurs façons de procéder. Un article simple sur le style de Google "voulez-vous dire"? vérifier est une bonne lecture pour des idées sur la façon de réaliser ceci. écrit par peter norvig, directeur de la recherche chez google.

http://norvig.com/spell-correct.html

"anderstornvig" mentionné la distance Levenshtein / edit, qui est une bonne idée mais qui n’est pas tout à fait appropriée car certaines permutations sont plus importantes que d’autres. Le problème semble être que nous utilisons beaucoup de connaissances spécifiques à un domaine lorsque nous déterminons quelles différences sont "significatives". et qui sont "insignifiants". Par exemple, nous savons que le trait d'union dans " Le prince de sang-mêlé " est très important mais le nombre dans " Firefox 3 " est très important.

Pour cette raison, vous pouvez envisager de personnaliser une métrique simple comme Levenshtein. Ajoutez des paramètres vous permettant de personnaliser les types de différences importants et ceux non importants.

En particulier, Levenshtein compte le nombre de "modifications". (c'est-à-dire, insertions, suppressions et substitutions) nécessaires pour transformer une chaîne en une autre. Effectivement, chaque édition est pondérée de la même manière. Vous pouvez écrire une implémentation qui pondère certaines modifications différemment. Par exemple, modifier un " - " à un " " devrait avoir un poids très faible (ce qui indique peu d'importance). Changer un " 3 " un "2", lorsque le nombre est seul, doit avoir un poids très élevé (indiquant une grande importance).

En paramétrant le calcul, vous créez une avenue pour améliorer continuellement votre algorithme. Construisez une configuration initiale et exécutez-la sur certaines données de test. Recherchez des endroits où la métrique est faible - par exemple, où elle fusionne deux termes que vous estimez devoir être séparés - et modifiez le paramétrage jusqu'à ce que vous soyez satisfait.

De cette façon, vous pouvez former votre algorithme en utilisant vos connaissances spécifiques à un domaine.

Ils ont probablement des systèmes automatiques suggérant des candidats potentiels à la combinaison, puis un humain choisit en dernier ressort de les combiner. Il se peut qu’ils se combinent automatiquement.

  • Votre suggestion de supprimer les espaces et autres signes de ponctuation est bonne. Très probablement, ils combinent des éléments qui ne diffèrent que par la ponctuation ou les espaces blancs automatiquement.
  • Pluriel ou singulier: rechercher ces différences serait facile à automatiser et produirait des candidats probables à la combinaison.
  • Erreurs d’orthographe courantes - il existe des bases de données contenant des erreurs d’orthographe courantes. Ils pourraient même s'appuyer sur l'API Google pour des suggestions orthographiques (je pense qu'ils l'exposent).
  • Soundex (ou similaire) est un bon moyen de rechercher des fautes d'orthographe, mais Il faut d’abord passer par les deux filtres ci-dessus (supprimer les espaces, la ponctuation et les pluriels) et ensuite probablement avoir besoin d’un humain pour faire l’appel s’ils sont identiques. Mais si vous pouviez présenter une représentation graphique montrant le regroupement avec le même soundex ou un soundex similaire, alors vous simplifieriez vraiment cette partie. Vous pouvez automatiquement envoyer une notification dès qu'un cluster commence à apparaître et à suivre une tendance (ils ne s'intéressent de toute façon qu'aux sujets de tendance, donc si même un cluster combiné n'est pas à la mode, ils peuvent attendre pour l'examiner.)

Là où vous avez vraiment besoin d'un humain, c'est lorsqu'il y a des surnoms communs. Comme Michael Jackson, MJ, Michael, etc. Ou MacDonalds, McD, Micky-D's, etc. Et avec les techniques, Visual Studio, VS2008, VS, etc. ou StackOverflow, SO, etc. Ensuite, C #, C-Sharp, C # .NET sont tous identiques, mais C et C ++ sont différents.

Donc, il faudrait que ce soit une combinaison. Il pourrait s’appuyer sur une base de données de variantes et de combinaisons connues, sur la base d’analyses antérieures ou d’autres sources, mais cette base de données serait régulièrement gérée par un éditeur.

En supposant que les sujets de tendances soient générés par calcul, il sera difficile de deviner l’algorithme exact qui le fait sur Twitter. Il est très probablement hautement confidentiel et breveté (aussi effrayant que cela puisse paraître pour les algorithmes brevetés).

Je pense qu'il est raisonnable de croire qu'ils utiliseraient une sorte d'algorithme en langage naturel. Selon les cas, ils sont souvent très lourds à effectuer et ne feront que ce que vous voulez.

Une lecture évidente et utile sur le sujet provient de wiki:

Bonne chance.

Je me souviens de la mort de MJ. Twitter est revenu manuellement et a corrigé les sujets pour indiquer les tweets de sa mort. Ce serait beaucoup de demander à un ordinateur ces jours-ci de faire quelque chose comme cela automatiquement, bien que cela puisse être fait vaguement.

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