2009-11-03 6 views
1

Je voudrais trouver un moyen de prendre un morceau de texte fourni par l'utilisateur et de déterminer quelles adresses sur la carte sont mentionnées dans le texte. Je serais heureux d'utiliser un service web gratuit s'il existe ou d'utiliser un script qui ne consommera pas trop de ressources. Une façon que je peux imaginer faire ceci est de prendre une base de données gigantesque d'adressage et de recherche pour chacun d'eux individuellement dans le texte, mais cela ne semble pas efficace. Y a-t-il un meilleur algorithme ou technique que l'on puisse proposer?Déterminer les endroits mentionnés dans un texte court (500 à 1000 mots) en utilisant PHP

Mon idée de base est de prendre les informations de localisation et de les transformer en marqueurs sur une carte Google. S'il est trop difficile ou fastidieux de déterminer les emplacements automatiquement, je pourrais demander aux utilisateurs d'ajouter des informations dans un champ de localisation si nécessaire, mais je préférerais ne pas le faire car certains des utilisateurs seront des étudiants assez jeunes.

Cela doit être fait en PHP car c'est le langage de script disponible sur mon serveur hébergé de l'école. Notez que toute cette installation se fera dans le contexte d'un nœud Drupal, et je prévois d'utiliser un filtre pour collecter les informations de localisation nécessaires à partir du nœud individuel, donc cette analyse ne se produira qu'une seule fois (quand le nouveau texte entre dans la base de données).

+0

emplacements? Voulez-vous dire des adresses. – mauris

+0

bien Google a un Geo Coder qui est capable de prendre une adresse et de vous renvoyer le lon et le lat que vous pouvez utiliser pour le marqueur - pas de CPU – mauris

+0

Oui, je prévois d'utiliser cette information, mais d'abord j'ai besoin de l'emplacement mentionné (ne sera pas une adresse). Par exemple, un étudiant pourrait mentionner le mot "Rome" et je voudrais en faire un marqueur sur une carte Google. Créer le marqueur est facile, je cherche le moyen le plus efficace de trouver le mot "Rome" dans le texte. –

Répondre

2

Vous pourriez obtenir quelque chose comme opencalais pour étiqueter votre texte. Une des catigories qu'il retourne est "ville" vous pouvez alors utiliser un autre module tiers pour montrer l'emplacement de la ville.

+0

Bien que les deux réponses soient techniquement correctes, celle-ci semble beaucoup moins de travail de ma part. Encore mieux, il y a apparemment un module Calais Géo qui fait presque exactement ce que je veux. –

1

Si vous aviez une liste gigantesque d'emplacements dans une base de données relationnelle, et que vous ne vous préoccupez que de 500 à 1000 mots, alors vous pourriez certainement passer la commande SQL pour trouver des correspondances pour les 500-1000 mots et serait très efficace. Mais même si vous deviez appeler une API lente, vous pourriez demander 500 mots un à un. Si vous gardiez un cache des correspondances, alors le cache se remplirait probablement rapidement de tous les mots d'arrêt (vous savez, comme "the", "if", "and") et ensuite en utilisant le cache, il serait probable que vous feriez beaucoup moins de 500 mots à chaque fois.

Je pense que vous pourriez être surpris de la rapidité avec laquelle l'approche par force brute fonctionnerait.

+0

Je suppose que je pourrais commencer par ignorer tous les mots de moins de 3 caractères ... ce qui améliorerait légèrement les performances. –

0

Pour référence future je voudrais juste mentionner l'API Yahoo appelée Placemaker et le service GeoMaker qui est construit sur le dessus.

Ces outils peuvent être utilisés pour analyser des emplacements à partir d'un texte comme demandé ici. Malheureusement, aucun module Drupal ne semble exister actuellement, mais une solution personnalisée semble facile à coder.