Bonjour,
Je travaille avec Bcb pour traiter du source en langage naturel.
J'utilise des listes pour stocker les différents états du texte
J'avais un produit qui fonctionnait( il existe encore sous forme de sauvegarde)
Je l'étend pour pouvoir traiter plusieurs textes en même temps.
Depuis peu je ressort des textes du traitement des proposition et il est propre dans le traitement, mais quand on le regarde dans le traitement appelant il est inversé. La variable qui porte la liste n'est pas modifié entre l'appelant et l'appelée
Je donne les points clefs du passage de paramètres
L'appel de la procédure en cause: la phrase est portée par pSegment et interface porte aussi incidemment l'identifiant du document
à la fin de la procédure qui traite les proposition j'ai mis un espion qui permet de voire ce qu'on a fait dans la procédure:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 ErrorCode = objProposition.ExtractQPCA( pSegment, iIdDoc);
à ce niveau la liste portée par pSegment est propre et le texte dans wsProposition est correct. On passe dans le return et on attaque le code de post traitement dans l'appelant et là les syntagmes qui sont portés par pChunk sont ressortie dans l'ordre inverse, comme si au passage de paramètre on ait inversé la ListProposition sans pour autant toucher aux différentes ListChunk
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 iSize = pSegment->pLinguisticSegment->ListProposition.size(); wsProposition = L""; itProposition = pSegment->pLinguisticSegment->ListProposition.begin(); while( itProposition != pSegment->pLinguisticSegment->ListProposition.end()) { pProposition = *itProposition; iSize = pProposition->ListChunk.size(); itChunk = pProposition->ListChunk.begin(); while( itChunk != pProposition->ListChunk.end()) { pChunk = *itChunk; itWord = pChunk->ListWord.begin(); while( itWord != pChunk->ListWord.end()) { pWord = *itWord; wsProposition += pWord->wsWord; wsProposition += L" "; itWord++; } itChunk++; } itProposition++; } return( ErrorCode); } //0
Je voudrais savoir si quelqu'un a déjà observé cela et si il existe une parade ou une explication.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 iSize = pSegment->pLinguisticSegment->ListProposition.size(); itProposition = pSegment->pLinguisticSegment->ListProposition.begin(); while( itProposition != pSegment->pLinguisticSegment->ListProposition.end()) { wsProposition = L""; pProposition = *itProposition; itChunk = pProposition->ListChunk.begin(); while( itChunk != pSegment->pLinguisticSegment->ListChunk.end() && (int)pChunk > 0x4EF7000) { pChunk = *itChunk; if( (int)pChunk > 0x4EF7000) { itWord = pChunk->ListWord.begin(); while( itWord != pChunk->ListWord.end()) { pWord = *itWord++; wsProposition += pWord->wsWord; wsProposition += L" "; } } itChunk++; } pProposition->idElement = 0; pProposition->idParagraph = iNum; if( pProposition->TypeElement == ELEMENT_OTHER) pProposition->TypeElement = ELEMENT_QUALIFICATEUR; if( wsActualUnivers.size() == 0) { pProposition->Univers.wsName = wsNextUnivers; } else { pProposition->Univers.wsName = wsActualUnivers; } if( bTitle == true) { pProposition->Univers.wsName = wsProposition; pProposition->TypeElement = ELEMENT_TITLE; if( iNum > 0) pProposition->Univers.idParagraph = iNum; else pProposition->Univers.idParagraph = 0; } itProposition++; }
Partager