Les meilleurs développeurs C++ freelances sont sur Codeur.com
Fermé·30 à 300 €·3 offres·824 vues
Bonjour.
Ci joint un projet de traitement de chaîne de mots qui peut apparaître simple au premier abords mais qui nécessite certaines compétences en terme d'algo et d'optimisations: merci de lire jusqu'au bout pour éviter de poser des questions sur les aspects techniques déjà mentionnés.
OBJECTIF: A partir d'un fichier csv contenant près de 20 millions de lignes formatées de la manière suivante (phrases;numero de catégorie), je souhaite extraire les chaines de mots les plus petites possibles qui appartiennent à 100 % à la catégorie nommée.
Un exemple sera parlant:
FICHIER SOURCE CSV
le choux blanc;1
le vinaigre rouge;2
les 3 petits cochons;2
un choux rouge;2
Nous avons 4 lignes et 2 catégories dans cet exemple (dans la réalité on a environ 60 catégories et 20 millions de lignes soit un fichier de près de 550 Mo).
Le logiciel doit étudier toutes les chaines de mots (plusieurs par lignes...) et sortir autant de fichiers qu'il y a de catégories. (nommé out1.csv, out2.csv...dans le même répertoire de travail que celui du logiciel)
Remarques:
- Le fichier source ne contient que des chaines à caractères alpha numériques
- l'ordre des mots doit être conservé
- Les délimiteurs sont les espaces
OUT1.CSV contiendra:
blanc
le choux
OUT2.CSV contiendra:
vinaigre
rouge
les
3
petits
cochons
un
Dans ce cas, nous avons des chaines de mots plutôt courtes, mais il est courant d'avoir plusieurs mots si la liste est longue.
Que me donnent ces résultats ? Comment les interpréter ?
En reprenant le fichier de sortie out1.csv, je suis capable de dire que la chaîne de mot "blanc" appartient à 100% à la catégorie 1. De même, pour "le choux"...
Pourquoi, n'ai je pas "le choux blanc" ou "choux blanc" ?
Tout simplement car j'ai indiqué plus haut, que je souhaite retenir les chaines les plus courtes possibles ! Donc comme "le choux" suffit, la chaîne "le choux blanc" n'a pas besoin d'être retenue.
Une des difficultés de l'optimisation réside de ne pas traiter plusieurs fois les mêmes chaines de mots...
Contraintes techniques: Le logiciel doit tourner sous Linux et être optimisé pour être parallélisé sur plusieurs processeurs. Je souhaite choisir le nombre de CPUs utilisés (entre 8 et 96). La limite de ressources mémoire vive doit être de 16 Go max.
Lorsque le logiciel est lancé, j'aurai besoin de connaitre l'évolution du "job".
Je possède déjà un logiciel qui fait l'ensemble de ce travail très correctement mais le langage de programmation utilisé ne gère pas le multicœur et manque de rapidité. Ce projet demande donc un langage de programmation très puissant et un bon algo !
Les scripts LINUX SED, GREP seraient trop longs, donc merci de ne pas exploiter cette voie.
N'hésitez pas à venir vers moi si vous avez des questions.
Merci
Budget indicatif : 30 à 300 €
Publication : 27 janvier 2014 à 11h28
Profils recherchés : Développeur C++ freelance, Développeur linux freelance
3 freelances ont répondu à ce projet
3 propositions de devis en moins de 2h
Votre navigateur Web n’est plus à jour. Il ne permet pas d’afficher correctement le site Codeur.com.
Nous vous invitons à mettre à jour votre navigateur ou à utiliser un autre navigateur plus récent.