Question

Je dois faire deux choses, d'abord, trouver un texte donné qui sont le plus mot utilisé et séquences de mots (limité à n ). Exemple:

  

Lorem * ipsum * dolor sit amet , consectetur adipiscing elit. Nunc auctor Urna sed Urna Mattis nec interdum magna ullamcorper. Donec ut Lorem eros, id rhoncus nisl. Praesent sodales Lorem vitae sapien volutpat et accumsan Lorem viverra. Proin lectus Elit , ut Cursus feugiat ut, porta sit amet leo. Cras is NISL, aliquet quis lobortis sit amet , viverra non erat. Vestibulum ante ipsum primis dans faucibus orci luctus et ultrices posuere cubilia Curae; Entier euismod scelerisque quam, et aliquet nibh dignissim à. Pellentesque ut Elit neque. Etiam facilisis NISL eu Mauris luctus dans consequat libero volutpat. Pellentesque auctor, justo à suscipit mollis, erat justo sollicitudin ipsum , en erat de ipsum id turpis. Dans tincidunt hendrerit scelerisque.

(quelques mots mes ont été entendue rectifier, mais il est un exemple).

Je voudrais résultat avec sit amet et non s'asseoir et amet

Toutes les idées sur la façon de commencer?

Deuxièmement, je dois envelopper tous les mots ou séquences mot correspondant à partir d'une liste donnée dans un fichier donné.

Pour cela, je pense à commander le résultat par desceding longueur, puis traiter chaque chaîne en fonction de remplacement, pour éviter d'avoir sit amet emballé si j'ai une autre s'asseoir mot dans ma liste. Est-ce une bonne façon de le faire?

Merci

Était-ce utile?

La solution

J'ai essayé de résoudre la première partie il y a quelque temps, voir ici:

http://corexii.com/freqwordseq/

Exemple sur Lorem Ipsum (pas le vôtre, mais un d'entre eux):

http://corexii.com/freqwordseq/?file=loremipsum&minfreq= 2 & minseq = 1 & maxseq = 4

Il est assez lent, mais il est un début. Qu'est-ce que vous voulez faire est peser les matchs de sorte que le plus de mots dans le match, le poids plus élevé, de faire des séquences plus importantes que les mots qui composent ces séquences. Et alors vous voudrez probablement pour optimiser la routine.

Autres conseils

Ceci est une solution fonctionnelle qui pourrait encore utiliser un peu de nettoyage. Mon algorithme général est le suivant:

  1. Explode tous les mots dans une liste w , excès de décapage des espaces et des ponctuation
  2. Trouvez le tableau de tous les n -length morceaux de w à partir de la position 0
  3. Trouvez le tableau de tous les n -length morceaux de w commençant à la position 1
    • ... continuer jusqu'à ce que vous avez trouvé le tableau de n morceaux -Longueur à partir de offset n -1
    • Remarque: si le dernier morceau de w est pas n -length, ne comprennent pas dans le cadre du tableau de morceau
  4. Concatenate tous les tableaux de gros morceau comme c
  5. Trouvez la fréquence de chaque valeur c

$sample = 'Lorem *ipsum* dolor sit amet, consectetur adipiscing elit. Nunc auctor urna sed urna mattis nec interdum magna ullamcorper. Donec ut lorem eros, id rhoncus nisl. Praesent sodales lorem vitae sapien volutpat et accumsan lorem viverra. Proin lectus elit, cursus ut feugiat ut, porta sit amet leo. Cras est nisl, aliquet quis lobortis sit amet, viverra non erat. Vestibulum ante ipsum  primis in faucibus orci luctus et ultrices posuere cubilia Curae; Integer euismod scelerisque quam, et aliquet nibh dignissim at. Pellentesque ut elit neque. Etiam facilisis nisl eu mauris luctus in consequat libero volutpat. Pellentesque auctor, justo in suscipit mollis, erat justo sollicitudin ipsum, in cursus erat ipsum id turpis. In tincidunt hendrerit scelerisque.';

function buildPhrases($string, $length) {

    $onlyWords = preg_replace('/\p{P}/', '', $string);
    $wordArray = preg_split('/\s+/s', $onlyWords);

    function buildPhraseChunks($wordArray, $length, $offset = 0)    
    {
        if ($offset >= $length) {
            return array();
        } else {
            $offsetWordArray = array_slice($wordArray, $offset);
            return array_merge(
                array_chunk($offsetWordArray, $length),             
                buildPhraseChunks(
                    $wordArray, $length, $offset + 1
                )
            );
        }
    }

    $onlyLengthN = function ($n) {
        return function($a) use ($n) {
            return count($a) == $n;
        };
    };

    $concatWords = function ($a, $b) {
        return $a . ' ' . $b;
    };

    $reduce = function ($a) use ($concatWords) {
        return array_reduce($a, $concatWords);
    };

    $format = function ($a) {
        return strtolower(trim($a));
    };

    $chunks = array_filter(
        buildPhraseChunks($wordArray, $length),
        $onlyLengthN($length)
    );
    $phrases = array_map($reduce, $chunks);
    $formattedPhrases = array_map($format, $phrases);

    return $formattedPhrases;

}

$phrases = buildPhrases($sample, 1);
$dropOnes = function($a) {
    return $a != 1;
};
$freqCount = array_filter(
    array_count_values($phrases),
    $dropOnes
);

arsort($freqCount);

print_r($freqCount);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top