Commit a564ec1e5b7fd3ebbd26ff5be90d9dc021367622

Authored by Jean-François Rey
1 parent eb3773e12a
Exists in master

bugfix

update SIGMUND source and bin to take file in argument
update script to request SOLR

Showing 15 changed files with 174 additions and 173 deletions Inline Diff

main_tools/ExploitConfidencePass.sh
1 #!/bin/bash 1 #!/bin/bash
2 2
3 ##################################################### 3 #####################################################
4 # File : ExploitConfidencePass.sh # 4 # File : ExploitConfidencePass.sh #
5 # Brief : Exploit the ASR confidence pass to : # 5 # Brief : Exploit the ASR confidence pass to : #
6 # -> boost the confident zone # 6 # -> boost the confident zone #
7 # -> find alternative in non confident zone 7 # -> find alternative in non confident zone
8 # -> dynamicly extend the lexicon # 8 # -> dynamicly extend the lexicon #
9 # Author : Jean-François Rey # 9 # Author : Jean-François Rey #
10 # (base on Emmanuel Ferreira # 10 # (base on Emmanuel Ferreira #
11 # and Hugo Mauchrétien works) # 11 # and Hugo Mauchrétien works) #
12 # Version : 1.0 # 12 # Version : 1.0 #
13 # Date : 25/06/13 # 13 # Date : 25/06/13 #
14 ##################################################### 14 #####################################################
15 15
16 echo "### ExploitConfidencePass.sh ###" 16 echo "### ExploitConfidencePass.sh ###"
17 17
18 # Check OTMEDIA_HOME env var 18 # Check OTMEDIA_HOME env var
19 if [ -z ${OTMEDIA_HOME} ] 19 if [ -z ${OTMEDIA_HOME} ]
20 then 20 then
21 OTMEDIA_HOME=$(dirname $(dirname $(readlink -e $0))) 21 OTMEDIA_HOME=$(dirname $(dirname $(readlink -e $0)))
22 export OTMEDIA_HOME=$OTMEDIA_HOME 22 export OTMEDIA_HOME=$OTMEDIA_HOME
23 fi 23 fi
24 24
25 # where is ExploitConfidencePass.sh 25 # where is ExploitConfidencePass.sh
26 MAIN_SCRIPT_PATH=$(dirname $(readlink -e $0)) 26 MAIN_SCRIPT_PATH=$(dirname $(readlink -e $0))
27 27
28 if [ -z ${SCRIPT_PATH} ] 28 if [ -z ${SCRIPT_PATH} ]
29 then 29 then
30 SCRIPT_PATH=$OTMEDIA_HOME/tools/scripts 30 SCRIPT_PATH=$OTMEDIA_HOME/tools/scripts
31 fi 31 fi
32 32
33 # Include scripts 33 # Include scripts
34 . $SCRIPT_PATH"/Tools.sh" 34 . $SCRIPT_PATH"/Tools.sh"
35 . $SCRIPT_PATH"/CheckExploitConfPass.sh" 35 . $SCRIPT_PATH"/CheckExploitConfPass.sh"
36 36
37 # where is ExploitConfidencePass.cfg 37 # where is ExploitConfidencePass.cfg
38 EXPLOITCONFIDENCEPASS_CONFIG_FILE=$OTMEDIA_HOME"/cfg/ExploitConfidencePass.cfg" 38 EXPLOITCONFIDENCEPASS_CONFIG_FILE=$OTMEDIA_HOME"/cfg/ExploitConfidencePass.cfg"
39 if [ -e $EXPLOITCONFIDENCEPASS_CONFIG_FILE ] 39 if [ -e $EXPLOITCONFIDENCEPASS_CONFIG_FILE ]
40 then 40 then
41 . $EXPLOITCONFIDENCEPASS_CONFIG_FILE 41 . $EXPLOITCONFIDENCEPASS_CONFIG_FILE
42 else 42 else
43 echo "ERROR : Can't find configuration file $EXPLOITCONFIDENCEPASS_CONFIG_FILE" >&2 43 echo "ERROR : Can't find configuration file $EXPLOITCONFIDENCEPASS_CONFIG_FILE" >&2
44 exit 1 44 exit 1
45 fi 45 fi
46 46
47 #---------------# 47 #---------------#
48 # Parse Options # 48 # Parse Options #
49 #---------------# 49 #---------------#
50 while getopts ":hDv:cr" opt 50 while getopts ":hDv:cr" opt
51 do 51 do
52 case $opt in 52 case $opt in
53 h) 53 h)
54 echo -e "$0 [OPTIONS] <INPUT_DIRECTORY>\n" 54 echo -e "$0 [OPTIONS] <INPUT_DIRECTORY>\n"
55 echo -e "\t Options:" 55 echo -e "\t Options:"
56 echo -e "\t\t-h :\tprint this message" 56 echo -e "\t\t-h :\tprint this message"
57 echo -e "\t\t-D :\tDEBUG mode on" 57 echo -e "\t\t-D :\tDEBUG mode on"
58 echo -e "\t\t-v l :\tVerbose mode, l=(1|2|3) level mode" 58 echo -e "\t\t-v l :\tVerbose mode, l=(1|2|3) level mode"
59 echo -e "\t\t-c :\tCheck process, stop if error detected" 59 echo -e "\t\t-c :\tCheck process, stop if error detected"
60 echo -e "\t\t-r n :\tforce rerun without deleting files" 60 echo -e "\t\t-r n :\tforce rerun without deleting files"
61 exit 1 61 exit 1
62 ;; 62 ;;
63 D) 63 D)
64 DEBUG=1 64 DEBUG=1
65 ;; 65 ;;
66 v) 66 v)
67 VERBOSE=$OPTARG 67 VERBOSE=$OPTARG
68 ;; 68 ;;
69 c) 69 c)
70 CHECK=1 70 CHECK=1
71 ;; 71 ;;
72 r) 72 r)
73 RERUN=1 73 RERUN=1
74 ;; 74 ;;
75 :) 75 :)
76 echo "Option -$OPTARG requires an argument." >&2 76 echo "Option -$OPTARG requires an argument." >&2
77 exit 1 77 exit 1
78 ;; 78 ;;
79 \?) 79 \?)
80 echo "BAD USAGE : unknow opton -$OPTARG" 80 echo "BAD USAGE : unknow opton -$OPTARG"
81 #exit 1 81 #exit 1
82 ;; 82 ;;
83 esac 83 esac
84 done 84 done
85 85
86 # mode debug enable 86 # mode debug enable
87 if [ $DEBUG -eq 1 ] 87 if [ $DEBUG -eq 1 ]
88 then 88 then
89 set -x 89 set -x
90 echo -e "## Mode DEBUG ON ##" 90 echo -e "## Mode DEBUG ON ##"
91 fi 91 fi
92 92
93 # mode verbose enable 93 # mode verbose enable
94 if [ $VERBOSE -gt 0 ]; then echo -e "## Verbose level : $VERBOSE ##" ;fi 94 if [ $VERBOSE -gt 0 ]; then echo -e "## Verbose level : $VERBOSE ##" ;fi
95 95
96 # Check USAGE by arguments number 96 # Check USAGE by arguments number
97 if [ $(($#-($OPTIND-1))) -ne 1 ] 97 if [ $(($#-($OPTIND-1))) -ne 1 ]
98 then 98 then
99 echo "BAD USAGE : ExploitConfidencePass.sh [OPTIONS] <INPUT_DIRECTORY>" 99 echo "BAD USAGE : ExploitConfidencePass.sh [OPTIONS] <INPUT_DIRECTORY>"
100 echo "$0 -h for more info" 100 echo "$0 -h for more info"
101 exit 1 101 exit 1
102 fi 102 fi
103 103
104 shift $((OPTIND-1)) 104 shift $((OPTIND-1))
105 # check input directory - first argument 105 # check input directory - first argument
106 if [ ! -e $1 ] 106 if [ ! -e $1 ]
107 then 107 then
108 print_error "can't open $1" 108 print_error "can't open $1"
109 exit 1 109 exit 1
110 fi 110 fi
111 111
112 print_info "[${BASENAME}] => ExploitConfPass start | $(date +'%d/%m/%y %H:%M:%S')" 1 112 print_info "[${BASENAME}] => ExploitConfPass start | $(date +'%d/%m/%y %H:%M:%S')" 1
113 113
114 #-------------# 114 #-------------#
115 # GLOBAL VARS # 115 # GLOBAL VARS #
116 #-------------# 116 #-------------#
117 INPUT_DIR=$(readlink -e $1) 117 INPUT_DIR=$(readlink -e $1)
118 OUTPUT_DIR=$INPUT_DIR 118 OUTPUT_DIR=$INPUT_DIR
119 BASENAME=$(basename $OUTPUT_DIR) 119 BASENAME=$(basename $OUTPUT_DIR)
120 SHOW_DIR="$OUTPUT_DIR/shows/" 120 SHOW_DIR="$OUTPUT_DIR/shows/"
121 SOLR_RES="$OUTPUT_DIR/solr/" 121 SOLR_RES="$OUTPUT_DIR/solr/"
122 EXT_LEX="$OUTPUT_DIR/LEX/" 122 EXT_LEX="$OUTPUT_DIR/LEX/"
123 TRIGGER_CONFZONE="$OUTPUT_DIR/trigg/" 123 TRIGGER_CONFZONE="$OUTPUT_DIR/trigg/"
124 LOGFILE="$OUTPUT_DIR/info_exploitconf.log" 124 LOGFILE="$OUTPUT_DIR/info_exploitconf.log"
125 ERRORFILE="$OUTPUT_DIR/error_exploitconf.log" 125 ERRORFILE="$OUTPUT_DIR/error_exploitconf.log"
126 126
127 CONFPASS_CONFIG_FILE="$(readlink -e $1)/ConfPass.cfg" 127 CONFPASS_CONFIG_FILE="$(readlink -e $1)/ConfPass.cfg"
128 if [ -e $CONFPASS_CONFIG_FILE ] 128 if [ -e $CONFPASS_CONFIG_FILE ]
129 then 129 then
130 { 130 {
131 RES_CONF_DIR=$(cat $CONFPASS_CONFIG_FILE | grep "^RES_CONF_DIR=" | cut -f2 -d"=") 131 RES_CONF_DIR=$(cat $CONFPASS_CONFIG_FILE | grep "^RES_CONF_DIR=" | cut -f2 -d"=")
132 RES_CONF=$(cat $CONFPASS_CONFIG_FILE | grep "^CONF_DIR=" | cut -f2 -d"=") 132 RES_CONF=$(cat $CONFPASS_CONFIG_FILE | grep "^CONF_DIR=" | cut -f2 -d"=")
133 print_info "[${BASENAME}] Use confidence measure from : $RES_CONF" 2 133 print_info "[${BASENAME}] Use confidence measure from : $RES_CONF" 2
134 } 134 }
135 else 135 else
136 { 136 {
137 print_error "[${BASENAME}] Can't find $CONFPASS_CONFIG_FILE" 137 print_error "[${BASENAME}] Can't find $CONFPASS_CONFIG_FILE"
138 print_error "[${BASENAME}] -> use res_p2" 138 print_error "[${BASENAME}] -> use res_p2"
139 RES_CONF_DIR="$INPUT_DIR/conf/res_p2/scored_ctm" 139 RES_CONF_DIR="$INPUT_DIR/conf/res_p2/scored_ctm"
140 RES_CONF="$INPUT_DIR/conf/res_p2" 140 RES_CONF="$INPUT_DIR/conf/res_p2"
141 } 141 }
142 fi 142 fi
143 143
144 mkdir -p $SHOW_DIR > /dev/null 2>&1 144 mkdir -p $SHOW_DIR > /dev/null 2>&1
145 mkdir -p $SOLR_RES > /dev/null 2>&1 145 mkdir -p $SOLR_RES > /dev/null 2>&1
146 mkdir -p $EXT_LEX > /dev/null 2>&1 146 mkdir -p $EXT_LEX > /dev/null 2>&1
147 mkdir -p $TRIGGER_CONFZONE > /dev/null 2>&1 147 mkdir -p $TRIGGER_CONFZONE > /dev/null 2>&1
148 148
149 #------------------# 149 #------------------#
150 # Create Workspace # 150 # Create Workspace #
151 #------------------# 151 #------------------#
152 # Lock directory 152 # Lock directory
153 if [ -e "$OUTPUT_DIR_BASENAME/EXPLOITCONFPASS.lock" ] && [ $RERUN -eq 0 ] 153 if [ -e "$OUTPUT_DIR_BASENAME/EXPLOITCONFPASS.lock" ] && [ $RERUN -eq 0 ]
154 then 154 then
155 print_warn "[${BASENAME}] ExploitConfidencePass is locked -> exit" 2 155 print_warn "[${BASENAME}] ExploitConfidencePass is locked -> exit" 2
156 exit 1 156 exit 1
157 fi 157 fi
158 rm "$OUTPUT_DIR/EXPLOITCONFPASS.unlock" > /dev/null 2>&1 158 rm "$OUTPUT_DIR/EXPLOITCONFPASS.unlock" > /dev/null 2>&1
159 touch "$OUTPUT_DIR/EXPLOITCONFPASS.lock" > /dev/null 2>&1 159 touch "$OUTPUT_DIR/EXPLOITCONFPASS.lock" > /dev/null 2>&1
160 160
161 rm $LOGFILE $ERRORFILE 2>/dev/null 161 rm $LOGFILE $ERRORFILE 2>/dev/null
162 162
163 #------# 163 #------#
164 # Save # 164 # Save #
165 #------# 165 #------#
166 cp $EXPLOITCONFIDENCEPASS_CONFIG_FILE $OUTPUT_DIR/ExploitConfPass.cfg 166 cp $EXPLOITCONFIDENCEPASS_CONFIG_FILE $OUTPUT_DIR/ExploitConfPass.cfg
167 echo "TRIGGER_DIR=$TRIGGER_CONFZONE" >> $OUTPUT_DIR/ExploitConfPass.cfg 167 echo "TRIGGER_DIR=$TRIGGER_CONFZONE" >> $OUTPUT_DIR/ExploitConfPass.cfg
168 echo "TRIGGER_SPEERAL=$TRIGGER_CONFZONE/speeral/" >> $OUTPUT_DIR/ExploitConfPass.cfg 168 echo "TRIGGER_SPEERAL=$TRIGGER_CONFZONE/speeral/" >> $OUTPUT_DIR/ExploitConfPass.cfg
169 echo "LEX_SPEERAL=$EXT_LEX/speeral/${lexname}_ext" >> $OUTPUT_DIR/ExploitConfPass.cfg 169 echo "LEX_SPEERAL=$EXT_LEX/speeral/${lexname}_ext" >> $OUTPUT_DIR/ExploitConfPass.cfg
170 echo "LEX_BINODE_SPEERAL=$EXT_LEX/speeral/${lexname}_ext.bin" >> $OUTPUT_DIR/ExploitConfPass.cfg 170 echo "LEX_BINODE_SPEERAL=$EXT_LEX/speeral/${lexname}_ext.bin" >> $OUTPUT_DIR/ExploitConfPass.cfg
171 print_info "[${BASENAME}] Save config in $OUTPUT_DIR_BASENAME/ExploitConfPass.cfg" 1 171 print_info "[${BASENAME}] Save config in $OUTPUT_DIR_BASENAME/ExploitConfPass.cfg" 1
172 172
173 #---------------# 173 #---------------#
174 # Check Pass # 174 # Check Pass #
175 #---------------# 175 #---------------#
176 if [ $( ls ${RES_CONF_DIR}/*.res 2> /dev/null | wc -l) -eq 0 ] 176 if [ $( ls ${RES_CONF_DIR}/*.res 2> /dev/null | wc -l) -eq 0 ]
177 then 177 then
178 print_error "[${BASENAME}] No Conf Pass res -> exit ExploitConfPass" 178 print_error "[${BASENAME}] No Conf Pass res -> exit ExploitConfPass"
179 if [ $CHECK -eq 1 ]; then print_log_file $ERRORFILE "No ConfPass res in ${RES_CONF_DIR}" ;fi 179 if [ $CHECK -eq 1 ]; then print_log_file $ERRORFILE "No ConfPass res in ${RES_CONF_DIR}" ;fi
180 exit 1 180 exit 1
181 fi 181 fi
182 182
183 #-----------------------# 183 #-----------------------#
184 # Segmentation by show # 184 # Segmentation by show #
185 #-----------------------# 185 #-----------------------#
186 # create txt file from scored res 186 # create txt file from scored res
187 # tag pos and lemmatization of the txt file 187 # tag pos and lemmatization of the txt file
188 # merge the scored res and taglem file 188 # merge the scored res and taglem file
189 # segment using the last generated file 189 # segment using the last generated file
190 # and create a ctm file by show 190 # and create a ctm file by show
191 191
192 print_info "[${BASENAME}] Segmentation by show" 1 192 print_info "[${BASENAME}] Segmentation by show" 1
193 193
194 # -> to txt 194 # -> to txt
195 print_info "[${BASENAME}] Create txt from scored res" 3 195 print_info "[${BASENAME}] Create txt from scored res" 3
196 cat ${RES_CONF_DIR}/*.res > $INPUT_DIR/$BASENAME.sctm 196 cat ${RES_CONF_DIR}/*.res > $INPUT_DIR/$BASENAME.sctm
197 cat $INPUT_DIR/$BASENAME.seg | $SIGMUND_BIN/myConvert.pl $INPUT_DIR/$BASENAME.sctm $INPUT_DIR/$BASENAME.tmp 197 cat $INPUT_DIR/$BASENAME.seg | $SIGMUND_BIN/myConvert.pl $INPUT_DIR/$BASENAME.sctm $INPUT_DIR/$BASENAME.tmp
198 cat $INPUT_DIR/$BASENAME.tmp | $SCRIPT_PATH/BdlexUC.pl $RULES/basic -f | sed -e "s/_/ /g" | sort -nt 'n' -k '2' > $INPUT_DIR/$BASENAME.txt 198 cat $INPUT_DIR/$BASENAME.tmp | $SCRIPT_PATH/BdlexUC.pl $RULES/basic -f | sed -e "s/_/ /g" | sort -nt 'n' -k '2' > $INPUT_DIR/$BASENAME.txt
199 199
200 # -> to tagger + lemme 200 # -> to tagger + lemme
201 print_info "[${BASENAME}] Tag pos and lem in txt file" 3 201 print_info "[${BASENAME}] Tag pos and lem in txt file" 3
202 iconv -t ISO_8859-1 $INPUT_DIR/$BASENAME.txt > $INPUT_DIR/$BASENAME.tmp 202 iconv -t ISO_8859-1 $INPUT_DIR/$BASENAME.txt > $INPUT_DIR/$BASENAME.tmp
203 $SIGMUND_BIN/txt2lem.sh $INPUT_DIR/$BASENAME.tmp $INPUT_DIR/$BASENAME.taglem 203 $SIGMUND_BIN/txt2lem.sh $INPUT_DIR/$BASENAME.tmp $INPUT_DIR/$BASENAME.taglem
204 204
205 # merge sctm and taglem 205 # merge sctm and taglem
206 print_info "[${BASENAME}] Merge scored ctm with tag pos and lem file" 3 206 print_info "[${BASENAME}] Merge scored ctm with tag pos and lem file" 3
207 cat $INPUT_DIR/$BASENAME.sctm | $SCRIPT_PATH/BdlexUC.pl ${RULES}/basic -f | iconv -t ISO_8859-1 | $SCRIPT_PATH/scoredCtmAndTaggedLem2All.pl $INPUT_DIR/$BASENAME.taglem > $INPUT_DIR/$BASENAME.ctl 207 cat $INPUT_DIR/$BASENAME.sctm | $SCRIPT_PATH/BdlexUC.pl ${RULES}/basic -f | iconv -t ISO_8859-1 | $SCRIPT_PATH/scoredCtmAndTaggedLem2All.pl $INPUT_DIR/$BASENAME.taglem > $INPUT_DIR/$BASENAME.ctl
208 208
209 # -> new seg 209 # -> new seg
210 print_info "[${BASENAME}] Create xml file and run Topic Seg" 3 210 print_info "[${BASENAME}] Create xml file and run Topic Seg" 3
211 $SIGMUND_BIN/tagLem2xml.pl $INPUT_DIR/$BASENAME.taglem $INPUT_DIR/$BASENAME.doc.xml 211 $SIGMUND_BIN/tagLem2xml.pl $INPUT_DIR/$BASENAME.taglem $INPUT_DIR/$BASENAME.doc.xml
212 rm $INPUT_DIR/$BASENAME.tmp #$INPUT_DIR/$BASENAME.taglem 212 rm $INPUT_DIR/$BASENAME.tmp #$INPUT_DIR/$BASENAME.taglem
213 213
214 # Lia_topic_seg : bring together sentences into show 214 # Lia_topic_seg : bring together sentences into show
215 cp $INPUT_DIR/$BASENAME.doc.xml 0.xml 215 java -cp $LIATOPICSEG/bin Test $INPUT_DIR/$BASENAME.doc.xml > $INPUT_DIR/show.seg
216 java -cp $LIATOPICSEG/bin Test > $INPUT_DIR/show.seg
217 cat $INPUT_DIR/show.seg | $SIGMUND_BIN/toSegEmiss.pl $INPUT_DIR/$BASENAME.show.seg 216 cat $INPUT_DIR/show.seg | $SIGMUND_BIN/toSegEmiss.pl $INPUT_DIR/$BASENAME.show.seg
218 rm 0.xml $INPUT_DIR/show.seg
219 217
220 if [ $CHECK -eq 1 ] 218 if [ $CHECK -eq 1 ]
221 then 219 then
222 if [ ! -s $INPUT_DIR/$BASENAME.show.seg ] 220 if [ ! -s $INPUT_DIR/$BASENAME.show.seg ]
223 then 221 then
224 print_error "[${BASENAME}] No Topic segmentation ! " 222 print_error "[${BASENAME}] No Topic segmentation ! "
225 print_error "[${BASENAME}] Check $ERRORFILE " 223 print_error "[${BASENAME}] Check $ERRORFILE "
226 print_log_file "$ERRORFILE" "No Topic segmentation in ${BASENAME}.show.seg" 224 print_log_file "$ERRORFILE" "No Topic segmentation in ${BASENAME}.show.seg"
227 fi 225 fi
228 fi 226 fi
229 227
230 # Segment ctm into several show files and create a seg list by show 228 # Segment ctm into several show files and create a seg list by show
231 print_info "[${BASENAME}] Segment ctm into show files and a seg list by show" 1 229 print_info "[${BASENAME}] Segment ctm into show files and a seg list by show" 1
232 $SCRIPT_PATH/ctm2show.pl $INPUT_DIR/$BASENAME.ctl $INPUT_DIR/$BASENAME.show.seg $SHOW_DIR 230 $SCRIPT_PATH/ctm2show.pl $INPUT_DIR/$BASENAME.ctl $INPUT_DIR/$BASENAME.show.seg $SHOW_DIR
233 231
234 #-----------------------------------------------------------# 232 #-----------------------------------------------------------#
235 # SOLR QUERIES # 233 # SOLR QUERIES #
236 # -> Create Confidente Word # 234 # -> Create Confidente Word #
237 # Keep conf words and use Tags # 235 # Keep conf words and use Tags #
238 # -> Query SOLR (document & multimedia) # 236 # -> Query SOLR (document & multimedia) #
239 # concat word + add date 2 day before and after the show # 237 # concat word + add date 2 day before and after the show #
240 # query document & multimedia # 238 # query document & multimedia #
241 #-----------------------------------------------------------# 239 #-----------------------------------------------------------#
242 print_info "[${BASENAME}] Create SOLR queries and ask SOLR" 1 240 print_info "[${BASENAME}] Create SOLR queries and ask SOLR" 1
243 for show in $(ls $SHOW_DIR/*.ctm) 241 for show in $(ls $SHOW_DIR/*.ctm)
244 do 242 do
245 bn=$(basename $show .ctm) 243 bn=$(basename $show .ctm)
246 # Remove words with low confidence and keep useful tagger words 244 # Remove words with low confidence and keep useful tagger words
247 cat $show | $SCRIPT_PATH/KeepConfZone.pl | grep -e "MOTINC\|NMS\|NMP\|NFS\|NFP\|X[A-Z]{3,5}" | cut -f3 -d' ' > "$SHOW_DIR/$bn.confzone" 245 cat $show | $SCRIPT_PATH/KeepConfZone.pl | grep -e "MOTINC\|NMS\|NMP\|NFS\|NFP\|X[A-Z]{3,5}" | cut -f3 -d' ' > "$SHOW_DIR/$bn.confzone"
248 # Get date 2 day before and after the show 246 # Get date 2 day before and after the show
249 datePattern=`$SCRIPT_PATH/daybefore2after.sh $(echo $BASENAME | cut -c1-6)` 247 datePattern=`$SCRIPT_PATH/daybefore2after.sh $(echo $BASENAME | cut -c1-6)`
250 # Create SOLR queries 248 # Create SOLR queries
251 cat $SHOW_DIR/$bn".confzone" | $SCRIPT_PATH/GenerateSOLRQueries.pl | iconv -f ISO_8859-1 -t UTF-8 > "$SHOW_DIR/$bn.queries" 249 cat $SHOW_DIR/$bn".confzone" | $SCRIPT_PATH/GenerateSOLRQueries.pl | iconv -f ISO_8859-1 -t UTF-8 > "$SHOW_DIR/$bn.queries"
252 # Ask SOLR DB 250 # Ask SOLR DB
253 if [ $(wc -w "$SHOW_DIR/$bn.queries" | cut -f1 -d' ') -gt 0 ]; then 251 if [ $(wc -w "$SHOW_DIR/$bn.queries" | cut -f1 -d' ') -gt 0 ]; then
254 query=$(cat $SHOW_DIR/$bn.queries)"&fq=docDate:[$datePattern]" 252 query=$(cat $SHOW_DIR/$bn.queries)"&fq=docDate:[$datePattern]"
255 echo $query > $SHOW_DIR/$bn.queries 253 echo $query > $SHOW_DIR/$bn.queries
256 print_info "python $SCRIPT_PATH/ProcessSOLRQueries.py $SHOW_DIR/$bn.queries $SOLR_RES/$bn.keywords.tmp $SOLR_RES/$bn.txt.tmp" 3 254 print_info "python $SCRIPT_PATH/ProcessSOLRQueries.py $SHOW_DIR/$bn.queries $SOLR_RES/$bn.keywords.tmp $SOLR_RES/$bn.txt.tmp" 3
257 python $SCRIPT_PATH/ProcessSOLRQueries.py $SHOW_DIR/$bn.queries $SOLR_RES/$bn.keywords.tmp $SOLR_RES/$bn.txt.tmp 255 python $SCRIPT_PATH/ProcessSOLRQueries.py $SHOW_DIR/$bn.queries $SOLR_RES/$bn.keywords.tmp $SOLR_RES/$bn.txt.tmp
258 cat $SOLR_RES/$bn.keywords.tmp | sort -u > $SOLR_RES/$bn.keywords 256 cat $SOLR_RES/$bn.keywords.tmp | sort -u > $SOLR_RES/$bn.keywords
259 cat $SOLR_RES/$bn.txt.tmp | sort -u > $SOLR_RES/$bn.txt 257 cat $SOLR_RES/$bn.txt.tmp | sort -u > $SOLR_RES/$bn.txt
260 rm $SOLR_RES/*.tmp > /dev/null 2>&1 258 rm $SOLR_RES/*.tmp > /dev/null 2>&1
261 fi 259 fi
262 260
263 if [ $CHECK -eq 1 ] 261 if [ $CHECK -eq 1 ]
264 then 262 then
265 if [ ! -e $SOLR_RES/$bn.keywords ] || [ ! -e $SOLR_RES/$bn.txt ] 263 if [ ! -e $SOLR_RES/$bn.keywords ] || [ ! -e $SOLR_RES/$bn.txt ]
266 then 264 then
267 print_warn "$bn.keywords and $bn.txt are empty !\nMaybe SOLR server is down !" 2 265 print_warn "$bn.keywords and $bn.txt are empty !\nMaybe SOLR server is down !" 2
268 print_log_file "$LOGFILE" "$bn.keywords and $bn.txt are empty !\nMaybe SOLR server is down !" 266 print_log_file "$LOGFILE" "$bn.keywords and $bn.txt are empty !\nMaybe SOLR server is down !"
269 fi 267 fi
270 fi 268 fi
271 269
272 done 270 done
273 271
274 #----------------------------------------------------------------------------------------------- 272 #-----------------------------------------------------------------------------------------------
275 # Build trigger file 273 # Build trigger file
276 # 1) keywords are automatically boosted in the non confident zone of the current res 274 # 1) keywords are automatically boosted in the non confident zone of the current res
277 # confident zone are boosted 275 # confident zone are boosted
278 # previous words in sensible zone are penalized 276 # previous words in sensible zone are penalized
279 # 2) OOVs are extracted + phonetized 277 # 2) OOVs are extracted + phonetized
280 # 3) Try to find OOVs acousticly in the current segment 278 # 3) Try to find OOVs acousticly in the current segment
281 # 4) Generate the .trigg file 279 # 4) Generate the .trigg file
282 #------------------------------------------------------------------------------------------------ 280 #------------------------------------------------------------------------------------------------
283 print_info "[${BASENAME}] Build trigger files" 1 281 print_info "[${BASENAME}] Build trigger files" 1
284 for i in `ls $SOLR_RES/*.keywords` 282 for i in `ls $SOLR_RES/*.keywords`
285 do 283 do
286 basename=`basename $i .keywords` 284 basename=`basename $i .keywords`
287 285
288 # 286 #
289 # Tokenize & produce coverage report 287 # Tokenize & produce coverage report
290 # Use filter you need 288 # Use filter you need
291 # 289 #
292 print_info "[${BASENAME}] keywords filtering and produce coverage report" 3 290 print_info "[${BASENAME}] keywords filtering and produce coverage report" 3
293 # Default filter 291 # Default filter
294 cat $i | $SCRIPT_PATH/CleanFilter.sh | ${SCRIPT_PATH}/ApplyCorrectionRules.pl ${LEXICON}.regex | $SCRIPT_PATH/BdlexUC.pl $RULES/basic -t |\ 292 cat $i | $SCRIPT_PATH/CleanFilter.sh | ${SCRIPT_PATH}/ApplyCorrectionRules.pl ${LEXICON}.regex | $SCRIPT_PATH/BdlexUC.pl $RULES/basic -t |\
295 $SCRIPT_PATH/CoverageReportMaker.pl --out $SOLR_RES/${basename}_tmp_report $LEXICON.bdlex_tok 293 $SCRIPT_PATH/CoverageReportMaker.pl --out $SOLR_RES/${basename}_tmp_report $LEXICON.bdlex_tok
296 # do less filter 294 # do less filter
297 #cat $i | $SCRIPT_PATH/BdlexUC.pl $RULES/basic -t | sed -f $RULES/preprocess.regex | sed -f $RULES/lastprocess.regex | $SCRIPT_PATH/CoverageReportMaker.pl --out $SOLR_RES/${basename}_tmp_report $LEXICON.bdlex_tok 295 #cat $i | $SCRIPT_PATH/BdlexUC.pl $RULES/basic -t | sed -f $RULES/preprocess.regex | sed -f $RULES/lastprocess.regex | $SCRIPT_PATH/CoverageReportMaker.pl --out $SOLR_RES/${basename}_tmp_report $LEXICON.bdlex_tok
298 296
299 297
300 # 298 #
301 # Extract "real" OOV and phonetize them 299 # Extract "real" OOV and phonetize them
302 # -> petit filtrage persoo pour eviter d'avoir trop de bruits 300 # -> petit filtrage persoo pour eviter d'avoir trop de bruits
303 # 301 #
304 print_info "[${BASENAME}] Extract OOV and phonetize them" 3 302 print_info "[${BASENAME}] Extract OOV and phonetize them" 3
305 ${SCRIPT_PATH}/FindNormRules.pl $SOLR_RES/${basename}_tmp_report/report.oov $LEXICON.bdlex_tok | cut -f3 | grep -v "#" | grep -v "^[A-Z]\+$" | grep -v "^[0-9]" | grep --perl-regex -v "^([a-z']){1,3}$" | $SCRIPT_PATH/BdlexUC.pl $RULES/basic -f | iconv -t ISO_8859-1 -f UTF-8 | ${LIA_LTBOX}/lia_phon/script/lia_lex2phon_variante | grep -v "core dumped" | cut -d"[" -f1 | sort -u | ${SCRIPT_PATH}/PhonFormatter.pl | iconv -f ISO_8859-1 -t UTF-8 | $SCRIPT_PATH/BdlexUC.pl $RULES/basic -t > $SOLR_RES/${basename}.phon_oov 303 ${SCRIPT_PATH}/FindNormRules.pl $SOLR_RES/${basename}_tmp_report/report.oov $LEXICON.bdlex_tok | cut -f3 | grep -v "#" | grep -v "^[A-Z]\+$" | grep -v "^[0-9]" | grep --perl-regex -v "^([a-z']){1,3}$" | $SCRIPT_PATH/BdlexUC.pl $RULES/basic -f | iconv -t ISO_8859-1 -f UTF-8 | ${LIA_LTBOX}/lia_phon/script/lia_lex2phon_variante | grep -v "core dumped" | cut -d"[" -f1 | sort -u | ${SCRIPT_PATH}/PhonFormatter.pl | iconv -f ISO_8859-1 -t UTF-8 | $SCRIPT_PATH/BdlexUC.pl $RULES/basic -t > $SOLR_RES/${basename}.phon_oov
306 304
307 # 305 #
308 # Search INVOC & OOV in the current lattice 306 # Search INVOC & OOV in the current lattice
309 # 307 #
310 print_info "[${BASENAME}] Search INVOC and OOV in the current lattice" 3 308 print_info "[${BASENAME}] Search INVOC and OOV in the current lattice" 3
311 cat $SOLR_RES/${basename}_tmp_report/report.invoc | grep -v "\b0" | cut -f1 | grep -v --perl-regex -v "^[a-zA-Z']{1,3}$" | grep -v --perl-regex "^[a-zA-Z0-9]{1,3}$" | grep -v "<s>" | grep -v "</s>" | $SCRIPT_PATH/BdlexUC.pl $RULES/basic -t > $TRIGGER_CONFZONE/$basename.tosearch 309 cat $SOLR_RES/${basename}_tmp_report/report.invoc | grep -v "\b0" | cut -f1 | grep -v --perl-regex -v "^[a-zA-Z']{1,3}$" | grep -v --perl-regex "^[a-zA-Z0-9]{1,3}$" | grep -v "<s>" | grep -v "</s>" | $SCRIPT_PATH/BdlexUC.pl $RULES/basic -t > $TRIGGER_CONFZONE/$basename.tosearch
312 cat $SOLR_RES/${basename}.phon_oov | cut -f1 >> $TRIGGER_CONFZONE/$basename.tosearch 310 cat $SOLR_RES/${basename}.phon_oov | cut -f1 >> $TRIGGER_CONFZONE/$basename.tosearch
313 311
314 # For each treil 312 # For each treil
315 for baseseg in $(cat "$SHOW_DIR/$basename.lst") 313 for baseseg in $(cat "$SHOW_DIR/$basename.lst")
316 do 314 do
317 $OTMEDIA_HOME/tools/QUOTE_FINDER/bin/acousticFinder ${LEXICON}.speer_phon $RES_CONF/wlat/$baseseg.wlat $TRIGGER_CONFZONE/${basename}.tosearch $SOLR_RES/$basename.phon_oov > $TRIGGER_CONFZONE/$baseseg.acousticlyfound $OUTPUT_REDIRECTION 315 $OTMEDIA_HOME/tools/QUOTE_FINDER/bin/acousticFinder ${LEXICON}.speer_phon $RES_CONF/wlat/$baseseg.wlat $TRIGGER_CONFZONE/${basename}.tosearch $SOLR_RES/$basename.phon_oov > $TRIGGER_CONFZONE/$baseseg.acousticlyfound $OUTPUT_REDIRECTION
318 # 316 #
319 # Produce the boost file for the next decoding pass 317 # Produce the boost file for the next decoding pass
320 # 318 #
321 print_info "[${BASENAME}] Produce trigg file : $baseseg " 3 319 print_info "[${BASENAME}] Produce trigg file : $baseseg " 3
322 cat $RES_CONF_DIR/$baseseg.res | $SCRIPT_PATH/ScoreCtm2trigg.pl $TRIGGER_CONFZONE/$baseseg.acousticlyfound > $TRIGGER_CONFZONE/$baseseg.trigg 320 cat $RES_CONF_DIR/$baseseg.res | $SCRIPT_PATH/ScoreCtm2trigg.pl $TRIGGER_CONFZONE/$baseseg.acousticlyfound > $TRIGGER_CONFZONE/$baseseg.trigg
323 done 321 done
324 322
325 done 323 done
326 324
327 #----------------------------------------------------------------------------------------------- 325 #-----------------------------------------------------------------------------------------------
328 # Build the extended SPEERAL Lexicon 326 # Build the extended SPEERAL Lexicon
329 # 1) Merge OOVs + LEXICON 327 # 1) Merge OOVs + LEXICON
330 # 1) Related text are collected in order to find the invoc word with maximizing the ppl (LM proba) 328 # 1) Related text are collected in order to find the invoc word with maximizing the ppl (LM proba)
331 # 2) The current lexicon is extended with all the valid OOVs 329 # 2) The current lexicon is extended with all the valid OOVs
332 #----------------------------------------------------------------------------------------------- 330 #-----------------------------------------------------------------------------------------------
333 print_info "[${BASENAME}] Build extended Speeral Lexicon" 1 331 print_info "[${BASENAME}] Build extended Speeral Lexicon" 1
334 mkdir -p $EXT_LEX/final 332 mkdir -p $EXT_LEX/final
335 mkdir -p $EXT_LEX/tmp 333 mkdir -p $EXT_LEX/tmp
336 mkdir -p $EXT_LEX/tmp/txt 334 mkdir -p $EXT_LEX/tmp/txt
337 # 335 #
338 # Collect the acousticly found oov and their phonetisation 336 # Collect the acousticly found oov and their phonetisation
339 # 337 #
340 print_info "[${BASENAME}] Get all OOV and retrieve all phonetisation" 3 338 print_info "[${BASENAME}] Get all OOV and retrieve all phonetisation" 3
341 for i in `ls $SOLR_RES/*.phon_oov` 339 for i in `ls $SOLR_RES/*.phon_oov`
342 do 340 do
343 basename=`basename $i .phon_oov` 341 basename=`basename $i .phon_oov`
344 342
345 rm $EXT_LEX/$basename.acousticlyfound 2> /dev/null 343 rm $EXT_LEX/$basename.acousticlyfound 2> /dev/null
346 # list acousticly found for the show 344 # list acousticly found for the show
347 for baseseg in $(cat "$SHOW_DIR/$basename.lst") 345 for baseseg in $(cat "$SHOW_DIR/$basename.lst")
348 do 346 do
349 cat $TRIGGER_CONFZONE/$baseseg.acousticlyfound | cut -f1 | cut -f2 -d"=" >> $EXT_LEX/$basename.acousticlyfound 347 cat $TRIGGER_CONFZONE/$baseseg.acousticlyfound | cut -f1 | cut -f2 -d"=" >> $EXT_LEX/$basename.acousticlyfound
350 done 348 done
351 cat $EXT_LEX/$basename.acousticlyfound | sort -u > $EXT_LEX/.tmp 349 cat $EXT_LEX/$basename.acousticlyfound | sort -u > $EXT_LEX/.tmp
352 mv $EXT_LEX/.tmp $EXT_LEX/$basename.acousticlyfound 350 mv $EXT_LEX/.tmp $EXT_LEX/$basename.acousticlyfound
353 351
354 # 352 #
355 # Extract OOV really added 353 # Extract OOV really added
356 # 354 #
357 cat $SOLR_RES/$basename.phon_oov | cut -f1 | sort -u > $EXT_LEX/$basename.oov 355 cat $SOLR_RES/$basename.phon_oov | cut -f1 | sort -u > $EXT_LEX/$basename.oov
358 $SCRIPT_PATH/intersec.pl $EXT_LEX/$basename.oov $EXT_LEX/$basename.acousticlyfound > $EXT_LEX/$basename.oov_acousticlyfound 356 $SCRIPT_PATH/intersec.pl $EXT_LEX/$basename.oov $EXT_LEX/$basename.acousticlyfound > $EXT_LEX/$basename.oov_acousticlyfound
359 # 357 #
360 # Retrieve all phonetisation 358 # Retrieve all phonetisation
361 # 359 #
362 cat $SOLR_RES/${basename}.phon_oov | $SCRIPT_PATH/LexPhonFilter.pl $EXT_LEX/$basename.oov_acousticlyfound > $EXT_LEX/$basename.oov_acousticlyfound_phon 360 cat $SOLR_RES/${basename}.phon_oov | $SCRIPT_PATH/LexPhonFilter.pl $EXT_LEX/$basename.oov_acousticlyfound > $EXT_LEX/$basename.oov_acousticlyfound_phon
363 done 361 done
364 362
365 # 363 #
366 # Merge OOVs and their phonetisation 364 # Merge OOVs and their phonetisation
367 # 365 #
368 print_info "[${BASENAME}] Merge OOV and their phonetisation" 3 366 print_info "[${BASENAME}] Merge OOV and their phonetisation" 3
369 lexname=$(basename $LEXICON) 367 lexname=$(basename $LEXICON)
370 cat $EXT_LEX/*.oov_acousticlyfound_phon | sort -u > $EXT_LEX/final/all.oov_acousticlyfound_phon 368 cat $EXT_LEX/*.oov_acousticlyfound_phon | sort -u > $EXT_LEX/final/all.oov_acousticlyfound_phon
371 cat $EXT_LEX/*.oov_acousticlyfound | sort -u | grep --perl-regex -v "^([a-z']){3}$" > $EXT_LEX/final/all.oov_acousticlyfound 369 cat $EXT_LEX/*.oov_acousticlyfound | sort -u | grep --perl-regex -v "^([a-z']){3}$" > $EXT_LEX/final/all.oov_acousticlyfound
372 $SCRIPT_PATH/MergeLexicon.pl $EXT_LEX/final/all.oov_acousticlyfound_phon > $EXT_LEX/final/${lexname}_ext.phon 370 $SCRIPT_PATH/MergeLexicon.pl $EXT_LEX/final/all.oov_acousticlyfound_phon > $EXT_LEX/final/${lexname}_ext.phon
373 371
374 # 372 #
375 # Collect + clean retrieved txt 373 # Collect + clean retrieved txt
376 # 374 #
377 print_info "[${BASENAME}] Collect and clean SOLR txt answers" 2 375 print_info "[${BASENAME}] Collect and clean SOLR txt answers" 2
378 # choose filter 376 # choose filter
379 # default 377 # default
380 cat $SOLR_RES/*.txt | $SCRIPT_PATH/CleanFilter.sh | $SCRIPT_PATH/ApplyCorrectionRules.pl ${LEXICON}.regex | $SCRIPT_PATH/BdlexUC.pl $RULES/basic -t > $EXT_LEX/final/all.bdlex_txt 378 cat $SOLR_RES/*.txt | $SCRIPT_PATH/CleanFilter.sh | $SCRIPT_PATH/ApplyCorrectionRules.pl ${LEXICON}.regex | $SCRIPT_PATH/BdlexUC.pl $RULES/basic -t > $EXT_LEX/final/all.bdlex_txt
381 # low filter 379 # low filter
382 #cat $SOLR_RES/*.txt | $SCRIPT_PATH/BdlexUC.pl $RULES/basic -t | sed -f $RULES/preprocess.regex | sed -f $RULES/lastprocess.regex > $EXT_LEX/final/all.bdlex_txt 380 #cat $SOLR_RES/*.txt | $SCRIPT_PATH/BdlexUC.pl $RULES/basic -t | sed -f $RULES/preprocess.regex | sed -f $RULES/lastprocess.regex > $EXT_LEX/final/all.bdlex_txt
383 381
384 # 382 #
385 # Construct the map file 383 # Construct the map file
386 # 384 #
387 # Notes: 385 # Notes:
388 # - Expected format : 386 # - Expected format :
389 # <WORD1_STRING> <CANDIDATE1_STRING> <PHON_1> 387 # <WORD1_STRING> <CANDIDATE1_STRING> <PHON_1>
390 # 388 #
391 print_info "[${BASENAME}] Construct map file" 3 389 print_info "[${BASENAME}] Construct map file" 3
392 rm -f $EXT_LEX/final/${lexname}_ext.map 2>/dev/null 390 rm -f $EXT_LEX/final/${lexname}_ext.map 2>/dev/null
393 rm -f $EXT_LEX/final/${lexname}.unvalid_oov 2>/dev/null 391 rm -f $EXT_LEX/final/${lexname}.unvalid_oov 2>/dev/null
394 392
395 while read oov 393 while read oov
396 do 394 do
397 oov=`echo $oov | sed "s/\n//g"` 395 oov=`echo $oov | sed "s/\n//g"`
398 # 396 #
399 # Obtain the oov's tag 397 # Obtain the oov's tag
400 # 398 #
401 #oov_tag=`grep --perl-regex "^$oov\t" $DYNAMIC_TAGSTATS/all.tags | cut -f2` 399 #oov_tag=`grep --perl-regex "^$oov\t" $DYNAMIC_TAGSTATS/all.tags | cut -f2`
402 # 400 #
403 # Try to collect text containing the oov word 401 # Try to collect text containing the oov word
404 # 402 #
405 print_info "[${BASENAME}] Collect text containing the oov" 3 403 print_info "[${BASENAME}] Collect text containing the oov" 3
406 cat $EXT_LEX/final/all.bdlex_txt | grep --perl-regex " $oov " | $SCRIPT_PATH/NbMaxWordsFilter.pl 40 |uniq > $EXT_LEX/tmp/txt/$oov.bdlex_txt 404 cat $EXT_LEX/final/all.bdlex_txt | grep --perl-regex " $oov " | $SCRIPT_PATH/NbMaxWordsFilter.pl 40 |uniq > $EXT_LEX/tmp/txt/$oov.bdlex_txt
407 if [ -f $EXT_LEX/tmp/txt/$oov.bdlex_txt ]; then 405 if [ -f $EXT_LEX/tmp/txt/$oov.bdlex_txt ]; then
408 nbWords=`wc -l $EXT_LEX/tmp/txt/$oov.bdlex_txt | cut -f1 -d" "` 406 nbWords=`wc -l $EXT_LEX/tmp/txt/$oov.bdlex_txt | cut -f1 -d" "`
409 if [ $nbWords -eq 0 ]; then 407 if [ $nbWords -eq 0 ]; then
410 print_warn "[${BASENAME}] UNVALID OOV: $oov => $nbWords occurrences" 2 408 print_warn "[${BASENAME}] UNVALID OOV: $oov => $nbWords occurrences" 2
411 echo "$oov" >> $EXT_LEX/final/${lexname}.unvalid_oov 409 echo "$oov" >> $EXT_LEX/final/${lexname}.unvalid_oov
412 else 410 else
413 # 411 #
414 # Find a candidate in a filtred invoc lexicon => a candidate which maximize the ppl in the overall txt collected 412 # Find a candidate in a filtred invoc lexicon => a candidate which maximize the ppl in the overall txt collected
415 # 413 #
416 #echo "$/getCandidate $SPEER_LM_PATH $SPEER_LM_BASENAME $oov $LEXICON.bdlex_tok $EXT_LEX/tmp/txt/$oov.bdlex_txt" 414 #echo "$/getCandidate $SPEER_LM_PATH $SPEER_LM_BASENAME $oov $LEXICON.bdlex_tok $EXT_LEX/tmp/txt/$oov.bdlex_txt"
417 print_info `$SPEERAL_PATH/bin/getCandidate $SPEER_LM_PATH $SPEER_LM_BASENAME $oov $CANDIDATE_LEXICON $EXT_LEX/tmp/txt/$oov.bdlex_txt | cut -f1 -d" "` 3 415 print_info `$SPEERAL_PATH/bin/getCandidate $SPEER_LM_PATH $SPEER_LM_BASENAME $oov $CANDIDATE_LEXICON $EXT_LEX/tmp/txt/$oov.bdlex_txt | cut -f1 -d" "` 3
418 candidate=`$SPEERAL_PATH/bin/getCandidate $SPEER_LM_PATH $SPEER_LM_BASENAME $oov $CANDIDATE_LEXICON $EXT_LEX/tmp/txt/$oov.bdlex_txt | cut -f1 -d" "` 416 candidate=`$SPEERAL_PATH/bin/getCandidate $SPEER_LM_PATH $SPEER_LM_BASENAME $oov $CANDIDATE_LEXICON $EXT_LEX/tmp/txt/$oov.bdlex_txt | cut -f1 -d" "`
419 if [ ! "$candidate" == "" ]; then 417 if [ ! "$candidate" == "" ]; then
420 grep --perl-regex "^$oov\t" $EXT_LEX/final/all.oov_acousticlyfound_phon > $EXT_LEX/tmp/$oov.phon 418 grep --perl-regex "^$oov\t" $EXT_LEX/final/all.oov_acousticlyfound_phon > $EXT_LEX/tmp/$oov.phon
421 while read phonLine 419 while read phonLine
422 do 420 do
423 #<word> <phon> => <word> <candidate> <phon> 421 #<word> <phon> => <word> <candidate> <phon>
424 echo "$phonLine" | sed "s|\t|\t$candidate\t|" >> $EXT_LEX/final/${lexname}_ext.map 422 echo "$phonLine" | sed "s|\t|\t$candidate\t|" >> $EXT_LEX/final/${lexname}_ext.map
425 done < $EXT_LEX/tmp/$oov.phon 423 done < $EXT_LEX/tmp/$oov.phon
426 else 424 else
427 print_warn "[${BASENAME}] UNVALID OOV: $oov => no availaible Candidate word in LM" 2 425 print_warn "[${BASENAME}] UNVALID OOV: $oov => no availaible Candidate word in LM" 2
428 echo "$oov" >> $EXT_LEX/final/${lexname}.unvalid_oov 426 echo "$oov" >> $EXT_LEX/final/${lexname}.unvalid_oov
429 fi 427 fi
430 fi 428 fi
431 else 429 else
432 print_warn "[${BASENAME}] UNVALID OOV: $oov" 2 430 print_warn "[${BASENAME}] UNVALID OOV: $oov" 2
433 echo "$oov" >> $EXT_LEX/final/${lexname}.unvalid_oov 431 echo "$oov" >> $EXT_LEX/final/${lexname}.unvalid_oov
434 fi 432 fi
435 done < $EXT_LEX/final/all.oov_acousticlyfound 433 done < $EXT_LEX/final/all.oov_acousticlyfound
436 434
437 # 435 #
438 ### Speeral 436 ### Speeral
439 # 437 #
440 438
441 lexname=`basename $LEXICON` 439 lexname=`basename $LEXICON`
442 # 440 #
443 # Build the final trigger file 441 # Build the final trigger file
444 # 442 #
445 print_info "[${BASENAME}] Clean trigg files" 3 443 print_info "[${BASENAME}] Clean trigg files" 3
446 mkdir -p $TRIGGER_CONFZONE/speeral/ 2> /dev/null 444 mkdir -p $TRIGGER_CONFZONE/speeral/ 2> /dev/null
447 mkdir -p $EXT_LEX/speeral/ 2> /dev/null 445 mkdir -p $EXT_LEX/speeral/ 2> /dev/null
448 for i in `ls $TRIGGER_CONFZONE/*.trigg` 446 for i in `ls $TRIGGER_CONFZONE/*.trigg`
449 do 447 do
450 basename=`basename $i .trigg` 448 basename=`basename $i .trigg`
451 cat $i | $SCRIPT_PATH/RemoveLineContaining.pl $EXT_LEX/$lexname.unvalid_oov > $TRIGGER_CONFZONE/speeral/$basename.trigg 449 cat $i | $SCRIPT_PATH/RemoveLineContaining.pl $EXT_LEX/$lexname.unvalid_oov > $TRIGGER_CONFZONE/speeral/$basename.trigg
452 done 450 done
453 # 451 #
454 # Compile the speeral extended lexicon 452 # Compile the speeral extended lexicon
455 # 453 #
456 print_info "[${BASENAME}] Compile Speeral extended lexicon" 3 454 print_info "[${BASENAME}] Compile Speeral extended lexicon" 3
457 print_info "$SPEERAL_PATH/bin/buildmappedbinode $LEXICON.bdlex_phon $EXT_LEX/final/${lexname}_ext.map $AM_SKL $EXT_LEX/speeral/${lexname}_ext" 3 455 print_info "$SPEERAL_PATH/bin/buildmappedbinode $LEXICON.bdlex_phon $EXT_LEX/final/${lexname}_ext.map $AM_SKL $EXT_LEX/speeral/${lexname}_ext" 3
458 $SPEERAL_PATH/bin/buildmappedbinode $LEXICON.bdlex_phon $EXT_LEX/final/${lexname}_ext.map $AM_SKL $EXT_LEX/speeral/${lexname}_ext 456 $SPEERAL_PATH/bin/buildmappedbinode $LEXICON.bdlex_phon $EXT_LEX/final/${lexname}_ext.map $AM_SKL $EXT_LEX/speeral/${lexname}_ext
459 457
460 if [ $CHECK -eq 1 ] 458 if [ $CHECK -eq 1 ]
461 then 459 then
462 check_exploitconfpass_lex_check "${EXT_LEX}/speeral/${lexname}_ext" 460 check_exploitconfpass_lex_check "${EXT_LEX}/speeral/${lexname}_ext"
463 if [ $? -eq 1 ] 461 if [ $? -eq 1 ]
464 then 462 then
465 print_error "[${BASENAME}] Building Speeral Lexicon $INPUT_DIR -> exit" 463 print_error "[${BASENAME}] Building Speeral Lexicon $INPUT_DIR -> exit"
466 print_error "[${BASENAME}] Check $ERRORFILE" 464 print_error "[${BASENAME}] Check $ERRORFILE"
467 print_log_file $ERRORFILE "ERROR : Building Speeral Lexicon $INPUT_DIR" 465 print_log_file $ERRORFILE "ERROR : Building Speeral Lexicon $INPUT_DIR"
468 print_log_file $ERRORFILE "ERROR : ${EXT_LEX}/speeral/${lexname}_ext Empty after buildmappedbinode ?" 466 print_log_file $ERRORFILE "ERROR : ${EXT_LEX}/speeral/${lexname}_ext Empty after buildmappedbinode ?"
469 exit 1; 467 exit 1;
470 fi 468 fi
471 fi 469 fi
472 470
473 471
474 #-------# 472 #-------#
475 # CLOSE # 473 # CLOSE #
476 #-------# 474 #-------#
477 # Seem OK 475 # Seem OK
478 print_info "[${BASENAME}] <= ExploitConfidencePass End | $(date +'%d/%m/%y %H:%M:%S')" 1 476 print_info "[${BASENAME}] <= ExploitConfidencePass End | $(date +'%d/%m/%y %H:%M:%S')" 1
479 477
480 # unlok directory 478 # unlok directory
481 mv "$OUTPUT_DIR/EXPLOITCONFPASS.lock" "$OUTPUT_DIR/EXPLOITCONFPASS.unlock" 479 mv "$OUTPUT_DIR/EXPLOITCONFPASS.lock" "$OUTPUT_DIR/EXPLOITCONFPASS.unlock"
482 480
483 481
484 482
main_tools/OneScriptToRuleThemAll.sh
1 #!/bin/bash 1 #!/bin/bash
2 2
3 ##################################### 3 #####################################
4 # File: OneScriptToRuleThemAll.sh # 4 # File: OneScriptToRuleThemAll.sh #
5 # Brief : Script to launch OTMEDIA # 5 # Brief : Script to launch OTMEDIA #
6 # Version : 1.0 # 6 # Version : 1.0 #
7 # Date : 23/07/2013 # 7 # Date : 23/07/2013 #
8 # Author : Jean-François Rey # 8 # Author : Jean-François Rey #
9 ##################################### 9 #####################################
10 10
11 echo -e "#### OneScriptToRuleThemAll ####" 11 echo -e "#### OneScriptToRuleThemAll ####"
12 LORD=" Three::rings 12 LORD=" Three::rings
13 for:::the::Elven-King 13 for:::the::Elven-King
14 under:the:sky,:Seven:for:the 14 under:the:sky,:Seven:for:the
15 Dwarf-Lords::in::their::halls:of 15 Dwarf-Lords::in::their::halls:of
16 stone,:Nine for:Mortal 16 stone,:Nine for:Mortal
17 :::Men::: ________ doomed::to 17 :::Men::: ________ doomed::to
18 die.:One _,-'...:... \`-. for:::the 18 die.:One _,-'...:... \`-. for:::the
19 ::Dark:: ,- .:::::::::::. \`. Lord::on 19 ::Dark:: ,- .:::::::::::. \`. Lord::on
20 his:dark ,' .:::::zzz:::::. \`. :throne: 20 his:dark ,' .:::::zzz:::::. \`. :throne:
21 In:::the/ ::::OTMEDIA:::: \ Land::of 21 In:::the/ ::::OTMEDIA:::: \ Land::of
22 :Mordor:\ ::::SCRIPTS:::: / :where:: 22 :Mordor:\ ::::SCRIPTS:::: / :where::
23 ::the::: '. '::::YEEEP::::' ,' Shadows: 23 ::the::: '. '::::YEEEP::::' ,' Shadows:
24 lie.::One \`. \`\`:::::::::'' ,' Ring::to 24 lie.::One \`. \`\`:::::::::'' ,' Ring::to
25 ::rule:: \`-._\`\`\`:'''_,-' ::them:: 25 ::rule:: \`-._\`\`\`:'''_,-' ::them::
26 all,::One \`-----' ring::to 26 all,::One \`-----' ring::to
27 ::find::: them,:One 27 ::find::: them,:One
28 Ring:::::to bring::them 28 Ring:::::to bring::them
29 all::and::in:the:darkness:bind 29 all::and::in:the:darkness:bind
30 them:In:the:Land:of:Mordor 30 them:In:the:Land:of:Mordor
31 where:::the::Shadows 31 where:::the::Shadows
32 :::lie.:::" 32 :::lie.:::"
33 33
34 34
35 # Check OTMEDIA_HOME env var 35 # Check OTMEDIA_HOME env var
36 if [ -z ${OTMEDIA_HOME} ] 36 if [ -z ${OTMEDIA_HOME} ]
37 then 37 then
38 OTMEDIA_HOME=$(dirname $(dirname $(readlink -e $0))) 38 OTMEDIA_HOME=$(dirname $(dirname $(readlink -e $0)))
39 export OTMEDIA_HOME=$OTMEDIA_HOME 39 export OTMEDIA_HOME=$OTMEDIA_HOME
40 fi 40 fi
41 41
42 # where is OneScriptToRuleThemAll.sh 42 # where is OneScriptToRuleThemAll.sh
43 MAIN_SCRIPT_PATH=$(dirname $(readlink -e $0)) 43 MAIN_SCRIPT_PATH=$(dirname $(readlink -e $0))
44 44
45 RING="" 45 RING=""
46 p1=0 46 p1=0
47 p2=0 47 p2=0
48 conf=0 48 conf=0
49 exploitconf=0 49 exploitconf=0
50 p3=0 50 p3=0
51 recompose=0 51 recompose=0
52 scoring=0 52 scoring=0
53 53
54 #---------------# 54 #---------------#
55 # Parse Options # 55 # Parse Options #
56 #---------------# 56 #---------------#
57 while getopts ":hDv:cf:r123C:eRsa" opt 57 while getopts ":hDv:cf:r123C:eRsa" opt
58 do 58 do
59 case $opt in 59 case $opt in
60 h) 60 h)
61 echo -e "$0 [OPTIONS] <WAV_FILE> <OUTPUT_DIRECTORY>\n" 61 echo -e "$0 [OPTIONS] <WAV_FILE> <OUTPUT_DIRECTORY>\n"
62 echo -e "\t Options:" 62 echo -e "\t Options:"
63 echo -e "\t\t-h :\tprint this message" 63 echo -e "\t\t-h :\tprint this message"
64 echo -e "\t\t-D :\tDEBUG mode on" 64 echo -e "\t\t-D :\tDEBUG mode on"
65 echo -e "\t\t-v l :\tVerbose mode, l=(1|2|3) level mode" 65 echo -e "\t\t-v l :\tVerbose mode, l=(1|2|3) level mode"
66 echo -e "\t\t-c :\tCheck process, stop if error detected" 66 echo -e "\t\t-c :\tCheck process, stop if error detected"
67 echo -e "\t\t-f n :\tSpecify a speeral forks number (default 1)" 67 echo -e "\t\t-f n :\tSpecify a speeral forks number (default 1)"
68 echo -e "\t\t-r :\tForce to rerun without deleting all files" 68 echo -e "\t\t-r :\tForce to rerun without deleting all files"
69 echo -e "\t\t-a :\tDo every pass" 69 echo -e "\t\t-a :\tDo every pass"
70 echo -e "\t\t-1 :\tDo 1rt pass" 70 echo -e "\t\t-1 :\tDo 1rt pass"
71 echo -e "\t\t-2 :\tDo 2nd pass" 71 echo -e "\t\t-2 :\tDo 2nd pass"
72 echo -e "\t\t-3 :\tDo 3rd pass" 72 echo -e "\t\t-3 :\tDo 3rd pass"
73 echo -e "\t\t-C p :\tDo p confidence pass (1=all, 2 or 3)" 73 echo -e "\t\t-C p :\tDo p confidence pass (1=all, 2 or 3)"
74 echo -e "\t\t-e :\tDo exploit confidence pass (SOLR)" 74 echo -e "\t\t-e :\tDo exploit confidence pass (SOLR)"
75 echo -e "\t\t-R :\tDo recompose res" 75 echo -e "\t\t-R :\tDo recompose res"
76 echo -e "\t\t-s :\tDo scoring" 76 echo -e "\t\t-s :\tDo scoring"
77 exit 1 77 exit 1
78 ;; 78 ;;
79 D) 79 D)
80 RING=$RING" -D" 80 RING=$RING" -D"
81 ;; 81 ;;
82 v) 82 v)
83 RING=$RING" -v $OPTARG" 83 RING=$RING" -v $OPTARG"
84 ;; 84 ;;
85 c) 85 c)
86 RING=$RING" -c" 86 RING=$RING" -c"
87 ;; 87 ;;
88 f) 88 f)
89 FORKS=" -f $OPTARG" 89 FORKS=" -f $OPTARG"
90 ;; 90 ;;
91 r) 91 r)
92 RING=$RING" -r" 92 RING=$RING" -r"
93 ;; 93 ;;
94 a) 94 a)
95 p1=1 95 p1=1
96 p2=1 96 p2=1
97 p3=1 97 p3=1
98 conf=1 98 conf=1
99 exploitconf=1 99 exploitconf=1
100 recompose=1 100 recompose=1
101 scoring=1 101 scoring=1
102 ;; 102 ;;
103 1) 103 1)
104 p1=1 104 p1=1
105 ;; 105 ;;
106 2) 106 2)
107 p2=1 107 p2=1
108 ;; 108 ;;
109 3) 109 3)
110 p3=1 110 p3=1
111 ;; 111 ;;
112 C) 112 C)
113 conf=$OPTARG 113 conf=$OPTARG
114 ;; 114 ;;
115 e) 115 e)
116 exploitconf=1 116 exploitconf=1
117 ;; 117 ;;
118 R) 118 R)
119 recompose=1 119 recompose=1
120 ;; 120 ;;
121 s) 121 s)
122 scoring=1 122 scoring=1
123 ;; 123 ;;
124 :) 124 :)
125 echo "Option -$OPTARG requires an argument." >&2 125 echo "Option -$OPTARG requires an argument." >&2
126 exit 1 126 exit 1
127 ;; 127 ;;
128 \?) 128 \?)
129 echo "BAD USAGE : unknow opton -$OPTARG" 129 echo "BAD USAGE : unknow opton -$OPTARG"
130 exit 1 130 exit 1
131 ;; 131 ;;
132 esac 132 esac
133 done 133 done
134 134
135 # Check USAGE by arguments number 135 # Check USAGE by arguments number
136 if [ $(($#-($OPTIND-1))) -ne 2 ] 136 if [ $(($#-($OPTIND-1))) -ne 2 ]
137 then 137 then
138 echo "BAD USAGE : $0 [OPTIONS] <WAV_FILE> <OUTPUT_DIR>" 138 echo "BAD USAGE : $0 [OPTIONS] <WAV_FILE> <OUTPUT_DIR>"
139 echo "$0 -h for more info" 139 echo "$0 -h for more info"
140 exit 1 140 exit 1
141 fi 141 fi
142 142
143 shift $((OPTIND-1)) 143 shift $((OPTIND-1))
144 # check audio file - First argument 144 # check audio file - First argument
145 if [ -e $1 ] && [ -s $1 ] 145 if [ $p1 -eq 0 ] || [[ -e $1 && -s $1 ]]
146 then 146 then
147 echo -e "$LORD\n" 147 echo -e "$LORD\n"
148 REP_OUT=$2/$(basename ${1%.*}) 148 REP_OUT=$2/$(basename ${1%.*})
149 if [ $p1 -eq 1 ];then ${MAIN_SCRIPT_PATH}/FirstPass.sh ${RING} ${FORKS} $1 $2;fi 149 if [ $p1 -eq 1 ];then ${MAIN_SCRIPT_PATH}/FirstPass.sh ${RING} ${FORKS} $1 $2;fi
150 if [ $p2 -eq 1 ];then ${MAIN_SCRIPT_PATH}/SecondPass.sh ${RING} ${FORKS} ${REP_OUT};fi 150 if [ $p2 -eq 1 ];then ${MAIN_SCRIPT_PATH}/SecondPass.sh ${RING} ${FORKS} ${REP_OUT};fi
151 if [ $conf -eq 1 ] || [ $conf -eq 2 ];then $p${MAIN_SCRIPT_PATH}/ConfPass.sh ${RING} ${REP_OUT} "res_p2";fi 151 if [ $conf -eq 1 ] || [ $conf -eq 2 ];then $p${MAIN_SCRIPT_PATH}/ConfPass.sh ${RING} ${REP_OUT} "res_p2";fi
152 if [ $exploitconf -eq 1 ]; then ${MAIN_SCRIPT_PATH}/ExploitConfidencePass.sh ${RING} ${REP_OUT};fi 152 if [ $exploitconf -eq 1 ]; then ${MAIN_SCRIPT_PATH}/ExploitConfidencePass.sh ${RING} ${REP_OUT};fi
153 if [ $p3 -eq 1 ];then ${MAIN_SCRIPT_PATH}/ThirdPass.sh ${RING} ${FORKS} ${REP_OUT};fi 153 if [ $p3 -eq 1 ];then ${MAIN_SCRIPT_PATH}/ThirdPass.sh ${RING} ${FORKS} ${REP_OUT};fi
154 if [ $conf -eq 1 ] || [ $conf -eq 3 ];then ${MAIN_SCRIPT_PATH}/ConfPass.sh ${RING} ${REP_OUT} "res_p3";fi 154 if [ $conf -eq 1 ] || [ $conf -eq 3 ];then ${MAIN_SCRIPT_PATH}/ConfPass.sh ${RING} ${REP_OUT} "res_p3";fi
155 if [ $recompose -eq 1 ];then ${MAIN_SCRIPT_PATH}/RecomposePass.sh ${RING} ${REP_OUT};fi 155 if [ $recompose -eq 1 ];then ${MAIN_SCRIPT_PATH}/RecomposePass.sh ${RING} ${REP_OUT};fi
156 if [ $scoring -eq 1 ];then ${MAIN_SCRIPT_PATH}/ScoringRes.sh ${RING} ${REP_OUT};fi 156 if [ $scoring -eq 1 ];then ${MAIN_SCRIPT_PATH}/ScoringRes.sh ${RING} ${REP_OUT};fi
157 echo "done" 157 echo "done"
158 else 158 else
159 echo "can't find $1 OR file is empty" 159 echo "can't find $1 OR file is empty"
160 exit 1 160 exit 1
161 fi 161 fi
162 162
163 163
164 164
165 165
tools/SIGMUND/LIA_topic_seg/bin/Test.class
No preview for this file type
tools/SIGMUND/LIA_topic_seg/src/LIA_topic_seg/Boundaries.java
1 package LIA_topic_seg; 1 package LIA_topic_seg;
2 2
3 /** 3 /**
4 * Cette interface est dŽdiŽe ˆ la sŽlection des frontires ˆ partir d'un tableau de valeurs 4 * Cette interface est dédiée à la sélection des frontières à partir d'un tableau de valeurs
5 * associŽes ˆ chaque intervalle entre deux unitŽs de traitement. 5 * associées à chaque intervalle entre deux unités de traitement.
6 * La sŽlection peut se faire ˆ partir d'un nombre connu de frontires ou non, l'essentiel Žtant 6 * La sélection peut se faire à partir d'un nombre connu de frontières ou non, l'essentiel étant
7 * de fournir un sous ensemble des intervalles du texte en rŽponse. 7 * de fournir un sous ensemble des intervalles du texte en réponse.
8 * 8 *
9 * 9 *
10 */ 10 */
11 public interface Boundaries { 11 public interface Boundaries {
12 /** 12 /**
13 * retourne les numŽros des phrases aprs lesquelles se trouvent les frontires thŽmatiques 13 * retourne les numéros des phrases après lesquelles se trouvent les frontières thématiques
14 * @return un tableau d'entiers qui sont les frontires thŽmatiques 14 * @return un tableau d'entiers qui sont les frontières thématiques
15 */ 15 */
16 public int[] position_boundaries(); 16 public int[] position_boundaries();
17 /** 17 /**
18 * renvoie le nombre de segments thŽmatiques dŽduits 18 * renvoie le nombre de segments thématiques déduits
19 * @return un nombre 19 * @return un nombre
20 */ 20 */
21 public int count_segments(); 21 public int count_segments();
22 /** 22 /**
23 * permet de conna”tre le nombre de frontires thŽmatiques ˆ l'intŽrieur du texte 23 * permet de connaître le nombre de frontières thématiques à l'intérieur du texte
24 * Il se peut que ce nombre soit infŽrieur ˆ un nombre initialisŽ. 24 * Il se peut que ce nombre soit inférieur à un nombre initialisé.
25 * @return le nombre de frontires thŽmatiques 25 * @return le nombre de frontières thématiques
26 */ 26 */
27 public int count_boundaries(); 27 public int count_boundaries();
28 /** 28 /**
29 * Cette fonction permet de suivre l'Žvolution du programme en affichant les valeurs calculŽes 29 * Cette fonction permet de suivre l'évolution du programme en affichant les valeurs calculées
30 * @return une cha”ne de caractre o chaque ligne est un numŽro de frontire thŽmatique 30 * @return une chaîne de caractère où chaque ligne est un numéro de frontière thématique
31 */ 31 */
32 public String toString(); 32 public String toString();
33 } 33 }
34 34
tools/SIGMUND/LIA_topic_seg/src/LIA_topic_seg/DefaultBoundaries.java
1 package LIA_topic_seg; 1 package LIA_topic_seg;
2 2
3 import java.util.*; 3 import java.util.*;
4 4
5 /** 5 /**
6 * Cette classe implŽmente des calculs de frontires consŽcutifs aux calculs de valeurs des intervalles 6 * Cette classe implémente des calculs de frontières consécutifs aux calculs de valeurs des intervalles
7 * entre les unitŽs de traitement effectuŽs dans DefaultGapScores. 7 * entre les unités de traitement effectués dans DefaultGapScores.
8 * Elle permet de dŽduire les frontires ˆ partir des similaritŽs cosine, ou des profondeurs de similaritŽs. 8 * Elle permet de déduire les frontières à partir des similarités cosine, ou des profondeurs de similarités.
9 * Dans le premier cas on cherchera ˆ minimiser les scores, dans le second ˆ les maximiser. Pour les similaritŽs, 9 * Dans le premier cas on cherchera à minimiser les scores, dans le second à les maximiser. Pour les similarités,
10 * lissŽes ou non, on peut Žgalement rechercher des minimas locaux dans une certaine fentre, ce qui revient en fait 10 * lissées ou non, on peut également rechercher des minimas locaux dans une certaine fenêtre, ce qui revient en fait
11 * ˆ fixer une taille minimale des segments. 11 * à fixer une taille minimale des segments.
12 * Ces fonctions peuvent retourner un nombre de frontires prŽdŽfini dans le constructeur, ou bien peuvent 12 * Ces fonctions peuvent retourner un nombre de frontières prédéfini dans le constructeur, ou bien peuvent
13 * retourner les frontires en deˆ ou au delˆ d'un certain seuil, calculŽ en fonction de la moyenne et l'Žcart type 13 * retourner les frontières en deçà ou au delà d'un certain seuil, calculé en fonction de la moyenne et l'écart type
14 * de l'ensemble des scores des intervalles entre unitŽs de traitement. 14 * de l'ensemble des scores des intervalles entre unités de traitement.
15 * Toutes les fonctions travaillent directement sur l'attribut topic_boundaries et le mettent ˆ jour. 15 * Toutes les fonctions travaillent directement sur l'attribut topic_boundaries et le mettent à jour.
16 * 16 *
17 * 17 *
18 */ 18 */
19 public class DefaultBoundaries implements Boundaries { 19 public class DefaultBoundaries implements Boundaries {
20 20
21 float[] gaps_scores; 21 float[] gaps_scores;
22 int[] topic_boundaries; 22 int[] topic_boundaries;
23 int boundaries = 0; 23 int boundaries = 0;
24 float coef = -1; 24 float coef = -1;
25 25
26 /** 26 /**
27 * Constructeur de la classe avec un nombre prŽdŽfini de frontires thŽmatiques 27 * Constructeur de la classe avec un nombre prédéfini de frontières thématiques
28 * @param bw : le calcul des scores de tous les intervalles 28 * @param bw : le calcul des scores de tous les intervalles
29 * @param n : le nombre de frontires ˆ rechercher 29 * @param n : le nombre de frontières à rechercher
30 */ 30 */
31 public DefaultBoundaries(GapsScores bw, int n) { 31 public DefaultBoundaries(GapsScores bw, int n) {
32 32
33 gaps_scores = bw.values(); 33 gaps_scores = bw.values();
34 boundaries = n; 34 boundaries = n;
35 35
36 36
37 } 37 }
38 38
39 39
40 40
41 /** 41 /**
42 * Constructeur de la classe avec un nombre inconnu de frontires thŽmatiques, 42 * Constructeur de la classe avec un nombre inconnu de frontières thématiques,
43 * et un coefficient multiplicateur de prise en compte de l'Žcart type 43 * et un coefficient multiplicateur de prise en compte de l'écart type
44 * @param bw : le calcul des scores de tous les intervalles 44 * @param bw : le calcul des scores de tous les intervalles
45 * @param c : le seuil de dŽcision sera = moyenne + c*ecart_type 45 * @param c : le seuil de décision sera = moyenne + c*ecart_type
46 */ 46 */
47 public DefaultBoundaries(GapsScores bw, float c) { 47 public DefaultBoundaries(GapsScores bw, float c) {
48 48
49 gaps_scores = bw.values(); 49 gaps_scores = bw.values();
50 coef = c ; 50 coef = c ;
51 51
52 } 52 }
53 53
54 /** 54 /**
55 * Constructeur de la classe avec un nombre inconnu de frontires thŽmatiques, et un coefficient de 55 * Constructeur de la classe avec un nombre inconnu de frontières thématiques, et un coefficient de
56 * prise en compte de l'Žcart type par dŽfaut 56 * prise en compte de l'écart type par défaut
57 * @param bw : le calcul des scores de tous les intervalles 57 * @param bw : le calcul des scores de tous les intervalles
58 */ 58 */
59 public DefaultBoundaries(GapsScores bw) { 59 public DefaultBoundaries(GapsScores bw) {
60 60
61 gaps_scores = bw.values(); 61 gaps_scores = bw.values();
62 62
63 } 63 }
64 64
65 /** 65 /**
66 * Cette fonction calcule les frontires en recherchant les plus petites similaritŽs, puis en vŽrifiant que ces frontires ont une valeur infŽrieurs ˆ leurs voisines. 66 * Cette fonction calcule les frontières en recherchant les plus petites similarités, puis en vérifiant que ces frontières ont une valeur inférieurs à leurs voisines.
67 * Pour cela, on effectue d'abord un tri des frontires en fonction de leurs valeurs, puis on sŽlectionne dans l'ordre celles qui n'ont pas de "proches voisins" dŽjˆ sŽlectionnŽ. 67 * Pour cela, on effectue d'abord un tri des frontières en fonction de leurs valeurs, puis on sélectionne dans l'ordre celles qui n'ont pas de "proches voisins" déjà sélectionné.
68 * @param window : fentre dans laquelle on souhaite que les valeurs retenues soient minimales. On peut Žgalement considŽrer ce paramtre comme une taille minimale des segments. 68 * @param window : fenêtre dans laquelle on souhaite que les valeurs retenues soient minimales. On peut également considérer ce paramètre comme une taille minimale des segments.
69 */ 69 */
70 public void compute_loc_min(int window){ 70 public void compute_loc_min(int window){
71 //cette fonction est valable pour les calculs basŽs uniquement sur des cosinus ou Žquivalents 71 //cette fonction est valable pour les calculs basés uniquement sur des cosinus ou équivalents
72 //mme fonctionnement que compute_minimas sauf qu'on vŽrifie que la frontire est seule dans une fentre 72 //même fonctionnement que compute_minimas sauf qu'on vérifie que la frontière est seule dans une fenêtre
73 //la valeur de cette fentre permet de dŽterminer une taille minimale des segments 73 //la valeur de cette fenêtre permet de déterminer une taille minimale des segments
74 Comparator comparateur = new Comparator() { 74 Comparator comparateur = new Comparator() {
75 public int compare(Object i1, Object i2){ 75 public int compare(Object i1, Object i2){
76 76
77 int un = ((Integer)i1).intValue(); 77 int un = ((Integer)i1).intValue();
78 int deux = ((Integer)i2).intValue(); 78 int deux = ((Integer)i2).intValue();
79 79
80 float h = gaps_scores[un]-gaps_scores[deux]; 80 float h = gaps_scores[un]-gaps_scores[deux];
81 // System.out.println("ouin2 " + h); 81 // System.out.println("ouin2 " + h);
82 if (h>0) {return 1;} 82 if (h>0) {return 1;}
83 else if (h==0) {return 0;} 83 else if (h==0) {return 0;}
84 else {return -1;} 84 else {return -1;}
85 85
86 // return (gaps_scores[((Integer)i1).intValue()],gaps_scores[((Integer)i2).intValue()]); 86 // return (gaps_scores[((Integer)i1).intValue()],gaps_scores[((Integer)i2).intValue()]);
87 87
88 } 88 }
89 }; 89 };
90 90
91 91
92 Integer [] sentences = new Integer[gaps_scores.length] ; 92 Integer [] sentences = new Integer[gaps_scores.length] ;
93 for (int i = 0; i<gaps_scores.length ; i++){ 93 for (int i = 0; i<gaps_scores.length ; i++){
94 sentences[i]=new Integer(i); 94 sentences[i]=new Integer(i);
95 //System.out.print(sentences[i].intValue()); 95 //System.out.print(sentences[i].intValue());
96 } 96 }
97 topic_boundaries = new int[boundaries]; 97 topic_boundaries = new int[boundaries];
98 Arrays.sort (sentences, comparateur); 98 Arrays.sort (sentences, comparateur);
99 99
100 boolean[] choosen_boundaries = new boolean[gaps_scores.length]; 100 boolean[] choosen_boundaries = new boolean[gaps_scores.length];
101 for (int i = 0 ; i< choosen_boundaries.length ; i++){ 101 for (int i = 0 ; i< choosen_boundaries.length ; i++){
102 choosen_boundaries[i]=false; 102 choosen_boundaries[i]=false;
103 } 103 }
104 104
105 if (boundaries !=0){ 105 if (boundaries !=0){
106 int n=0; 106 int n=0;
107 int j=0; 107 int j=0;
108 while ( n<boundaries && j<sentences.length){ 108 while ( n<boundaries && j<sentences.length){
109 int position = sentences[j].intValue(); 109 int position = sentences[j].intValue();
110 boolean test = false; 110 boolean test = false;
111 int k=1; 111 int k=1;
112 while (k<= window && !test && position-k>=0){ 112 while (k<= window && !test && position-k>=0){
113 test = choosen_boundaries[position-k]; 113 test = choosen_boundaries[position-k];
114 k++; 114 k++;
115 } 115 }
116 k=1; 116 k=1;
117 while (k<= window && !test && position+k < choosen_boundaries.length){ 117 while (k<= window && !test && position+k < choosen_boundaries.length){
118 test = choosen_boundaries[position+k]; 118 test = choosen_boundaries[position+k];
119 k++; 119 k++;
120 } 120 }
121 if (!test){ 121 if (!test){
122 topic_boundaries[n] = position; 122 topic_boundaries[n] = position;
123 choosen_boundaries[position] = true; 123 choosen_boundaries[position] = true;
124 n++; 124 n++;
125 } 125 }
126 j++; 126 j++;
127 127
128 } 128 }
129 if (n < boundaries){ 129 if (n < boundaries){
130 int [] topic_boundaries2 = new int[n]; 130 int [] topic_boundaries2 = new int[n];
131 for (int i=0 ; i<n ; i++){ 131 for (int i=0 ; i<n ; i++){
132 topic_boundaries2[i] = topic_boundaries[i]; 132 topic_boundaries2[i] = topic_boundaries[i];
133 } 133 }
134 topic_boundaries = topic_boundaries2.clone(); 134 topic_boundaries = topic_boundaries2.clone();
135 } 135 }
136 boundaries = n; 136 boundaries = n;
137 } 137 }
138 else{ 138 else{
139 Vector<Integer> vect = new Vector<Integer>(); 139 Vector<Integer> vect = new Vector<Integer>();
140 float value = 0; 140 float value = 0;
141 float ec = 0; 141 float ec = 0;
142 for (int i=0; i<gaps_scores.length ; i++){ 142 for (int i=0; i<gaps_scores.length ; i++){
143 value +=gaps_scores[i]; 143 value +=gaps_scores[i];
144 } 144 }
145 value = value / gaps_scores.length; 145 value = value / gaps_scores.length;
146 for (int i=0; i<gaps_scores.length ; i++){ 146 for (int i=0; i<gaps_scores.length ; i++){
147 ec +=Math.abs(gaps_scores[i]-value); 147 ec +=Math.abs(gaps_scores[i]-value);
148 } 148 }
149 ec = ec/gaps_scores.length; 149 ec = ec/gaps_scores.length;
150 150
151 int i=0; 151 int i=0;
152 while (gaps_scores[sentences[i].intValue()]<value+(coef*ec) && i<gaps_scores.length){ 152 while (gaps_scores[sentences[i].intValue()]<value+(coef*ec) && i<gaps_scores.length){
153 //for (int i=0; i<gaps_scores.length ; i++){ 153 //for (int i=0; i<gaps_scores.length ; i++){
154 // if (gaps_scores[i]<value-ec){ 154 // if (gaps_scores[i]<value-ec){
155 155
156 int position = sentences[i].intValue(); 156 int position = sentences[i].intValue();
157 boolean test = false; 157 boolean test = false;
158 int k = 1; 158 int k = 1;
159 while (k<=window && !test && position-k>0){ 159 while (k<=window && !test && position-k>0){
160 test = choosen_boundaries[position-k]; 160 test = choosen_boundaries[position-k];
161 k++; 161 k++;
162 } 162 }
163 k = 1; 163 k = 1;
164 while (k<=window && !test && k+position<choosen_boundaries.length){ 164 while (k<=window && !test && k+position<choosen_boundaries.length){
165 test = choosen_boundaries[position+k]; 165 test = choosen_boundaries[position+k];
166 k++; 166 k++;
167 } 167 }
168 if (!test){ 168 if (!test){
169 Integer bound = new Integer(position); 169 Integer bound = new Integer(position);
170 vect.add(bound); 170 vect.add(bound);
171 choosen_boundaries[position]=true; 171 choosen_boundaries[position]=true;
172 } 172 }
173 //} 173 //}
174 i++; 174 i++;
175 } 175 }
176 topic_boundaries = new int[vect.size()]; 176 topic_boundaries = new int[vect.size()];
177 for (int n=0;n<vect.size();n++){ 177 for (int n=0;n<vect.size();n++){
178 178
179 topic_boundaries[n]=((Integer)vect.elementAt(n)).intValue(); 179 topic_boundaries[n]=((Integer)vect.elementAt(n)).intValue();
180 180
181 } 181 }
182 } 182 }
183 183
184 184
185 185
186 } 186 }
187 187
188 /** 188 /**
189 * Cette fonction dŽduit les frontires thŽmatiques on sŽlectionnant les n plus petites si le nombre de frontires ˆ sŽlectionners est prŽdŽfini, 189 * Cette fonction déduit les frontières thématiques on sélectionnant les n plus petites si le nombre de frontières à sélectionners est prédéfini,
190 * ou en sŽlectionnant toutes celles sous un certain seuil (moyenne - ecart-type) sinon. 190 * ou en sélectionnant toutes celles sous un certain seuil (moyenne - ecart-type) sinon.
191 * 191 *
192 */ 192 */
193 public void compute_min_similarities(){ 193 public void compute_min_similarities(){
194 //cette fonction renvoie les plus petits scores comme frontires . 194 //cette fonction renvoie les plus petits scores comme frontières .
195 //peut tre exŽcutŽe aprs calcul des similaritŽs. 195 //peut être exécutée après calcul des similarités.
196 Comparator comparateur = new Comparator() { 196 Comparator comparateur = new Comparator() {
197 public int compare(Object i1, Object i2){ 197 public int compare(Object i1, Object i2){
198 198
199 int un = ((Integer)i1).intValue(); 199 int un = ((Integer)i1).intValue();
200 int deux = ((Integer)i2).intValue(); 200 int deux = ((Integer)i2).intValue();
201 201
202 float h = gaps_scores[un]-gaps_scores[deux]; 202 float h = gaps_scores[un]-gaps_scores[deux];
203 // System.out.println("ouin2 " + h); 203 // System.out.println("ouin2 " + h);
204 if (h>0) {return 1;} 204 if (h>0) {return 1;}
205 else if (h==0) {return 0;} 205 else if (h==0) {return 0;}
206 else {return -1;} 206 else {return -1;}
207 207
208 // return (gaps_scores[((Integer)i1).intValue()],gaps_scores[((Integer)i2).intValue()]); 208 // return (gaps_scores[((Integer)i1).intValue()],gaps_scores[((Integer)i2).intValue()]);
209 209
210 } 210 }
211 }; 211 };
212 212
213 if (boundaries != 0) { 213 if (boundaries != 0) {
214 Integer [] sentences = new Integer[gaps_scores.length] ; 214 Integer [] sentences = new Integer[gaps_scores.length] ;
215 for (int i = 0; i<gaps_scores.length ; i++){ 215 for (int i = 0; i<gaps_scores.length ; i++){
216 sentences[i]=new Integer(i); 216 sentences[i]=new Integer(i);
217 //System.out.print(sentences[i].intValue()); 217 //System.out.print(sentences[i].intValue());
218 } 218 }
219 topic_boundaries = new int[boundaries]; 219 topic_boundaries = new int[boundaries];
220 Arrays.sort (sentences, comparateur); 220 Arrays.sort (sentences, comparateur);
221 for (int j=0; j<boundaries ; j++){ 221 for (int j=0; j<boundaries ; j++){
222 topic_boundaries[j] = sentences[j].intValue(); 222 topic_boundaries[j] = sentences[j].intValue();
223 } 223 }
224 } 224 }
225 225
226 else { 226 else {
227 227
228 Vector<Integer> vect = new Vector<Integer>(); 228 Vector<Integer> vect = new Vector<Integer>();
229 float value = 0; 229 float value = 0;
230 float ec = 0; 230 float ec = 0;
231 for (int i=0; i<gaps_scores.length ; i++){ 231 for (int i=0; i<gaps_scores.length ; i++){
232 value +=gaps_scores[i]; 232 value +=gaps_scores[i];
233 } 233 }
234 value = value / gaps_scores.length; 234 value = value / gaps_scores.length;
235 for (int i=0; i<gaps_scores.length ; i++){ 235 for (int i=0; i<gaps_scores.length ; i++){
236 ec +=Math.abs(gaps_scores[i]-value); 236 ec +=Math.abs(gaps_scores[i]-value);
237 } 237 }
238 ec = ec/gaps_scores.length; 238 ec = ec/gaps_scores.length;
239 239
240 for (int i=0; i<gaps_scores.length ; i++){ 240 for (int i=0; i<gaps_scores.length ; i++){
241 if (gaps_scores[i]<value+(coef*ec)){ 241 if (gaps_scores[i]<value+(coef*ec)){
242 242
243 Integer bound = new Integer(i); 243 Integer bound = new Integer(i);
244 vect.add(bound); 244 vect.add(bound);
245 245
246 } 246 }
247 } 247 }
248 topic_boundaries = new int[vect.size()]; 248 topic_boundaries = new int[vect.size()];
249 for (int i=0;i<vect.size();i++){ 249 for (int i=0;i<vect.size();i++){
250 250
251 topic_boundaries[i]=((Integer)vect.elementAt(i)).intValue(); 251 topic_boundaries[i]=((Integer)vect.elementAt(i)).intValue();
252 252
253 } 253 }
254 254
255 } 255 }
256 } 256 }
257 257
258 258
259 /** 259 /**
260 * Cette fonction dŽduit les frontires thŽmatiques on sŽlectionnant les n plus grandes valeurs si le nombre de frontires ˆ sŽlectionners est prŽdŽfini, 260 * Cette fonction déduit les frontières thématiques on sélectionnant les n plus grandes valeurs si le nombre de frontières à sélectionners est prédéfini,
261 * ou en sŽlectionnant toutes celles au dessus un certain seuil (moyenne + ecart-type) sinon. 261 * ou en sélectionnant toutes celles au dessus un certain seuil (moyenne + ecart-type) sinon.
262 * 262 *
263 */ 263 */
264 public void compute_max_depth(){ 264 public void compute_max_depth(){
265 // cette fonction permet de dŽterminer les frontires ˆ partir des depth scores 265 // cette fonction permet de déterminer les frontières à partir des depth scores
266 //on recherche alors les intervalles candidats ayant les plus grands scores 266 //on recherche alors les intervalles candidats ayant les plus grands scores
267 //le nombre est dŽterminŽ par boundaries ou bien ŽvaluŽ avec la moyenne et l'Žcart type 267 //le nombre est déterminé par boundaries ou bien évalué avec la moyenne et l'écart type
268 Comparator<Integer> comparateur = new Comparator<Integer>() { 268 Comparator<Integer> comparateur = new Comparator<Integer>() {
269 public int compare(Integer i1, Integer i2){ 269 public int compare(Integer i1, Integer i2){
270 270
271 271
272 float h = gaps_scores[i1.intValue()]-gaps_scores[i2.intValue()]; 272 float h = gaps_scores[i1.intValue()]-gaps_scores[i2.intValue()];
273 if (h>0) {return -1;} 273 if (h>0) {return -1;}
274 else if (h==0) {return 0;} 274 else if (h==0) {return 0;}
275 else {return 1;} 275 else {return 1;}
276 276
277 277
278 } 278 }
279 }; 279 };
280 Integer [] sentences = new Integer[gaps_scores.length] ; 280 Integer [] sentences = new Integer[gaps_scores.length] ;
281 for (int i = 0; i<gaps_scores.length ; i++){ 281 for (int i = 0; i<gaps_scores.length ; i++){
282 sentences[i]=new Integer(i); 282 sentences[i]=new Integer(i);
283 //System.out.print(sentences[i].intValue()); 283 //System.out.print(sentences[i].intValue());
284 } 284 }
285 if (boundaries != 0) { 285 if (boundaries != 0) {
286 topic_boundaries = new int[boundaries]; 286 topic_boundaries = new int[boundaries];
287 Arrays.sort (sentences, comparateur); 287 Arrays.sort (sentences, comparateur);
288 for (int j=0; j<boundaries && j<topic_boundaries.length; j++){ 288 for (int j=0; j<boundaries && j<topic_boundaries.length; j++){
289 topic_boundaries[j] = sentences[j].intValue(); 289 topic_boundaries[j] = sentences[j].intValue();
290 } 290 }
291 } 291 }
292 292
293 else { 293 else {
294 Vector<Integer> vect = new Vector<Integer>(); 294 Vector<Integer> vect = new Vector<Integer>();
295 float value = 0; 295 float value = 0;
296 float ec = 0; 296 float ec = 0;
297 for (int i=0; i<gaps_scores.length ; i++){ 297 for (int i=0; i<gaps_scores.length ; i++){
298 value +=gaps_scores[i]; 298 value +=gaps_scores[i];
299 } 299 }
300 value = value / gaps_scores.length; 300 value = value / gaps_scores.length;
301 for (int i=0; i<gaps_scores.length ; i++){ 301 for (int i=0; i<gaps_scores.length ; i++){
302 ec += Math.abs(gaps_scores[i]-value); 302 ec += Math.abs(gaps_scores[i]-value);
303 } 303 }
304 ec = ec/gaps_scores.length; 304 ec = ec/gaps_scores.length;
305 305
306 for (int i=0; i<gaps_scores.length ; i++){ 306 for (int i=0; i<gaps_scores.length ; i++){
307 if (gaps_scores[i]>value+(coef*ec)){ 307 if (gaps_scores[i]>value+(coef*ec)){
308 308
309 Integer bound = new Integer(i); 309 Integer bound = new Integer(i);
310 vect.add(bound); 310 vect.add(bound);
311 311
312 } 312 }
313 } 313 }
314 topic_boundaries = new int[vect.size()]; 314 topic_boundaries = new int[vect.size()];
315 for (int i=0;i<vect.size();i++){ 315 for (int i=0;i<vect.size();i++){
316 316
317 topic_boundaries[i]=((Integer)vect.elementAt(i)).intValue(); 317 topic_boundaries[i]=((Integer)vect.elementAt(i)).intValue();
318 318
319 } 319 }
320 320
321 } 321 }
322 } 322 }
323 323
324 324
325 325
326 /** 326 /**
327 * retourne les numŽros des phrases aprs lesquelles se trouvent les frontires thŽmatiques 327 * retourne les numéros des phrases après lesquelles se trouvent les frontières thématiques
328 */ 328 */
329 public int[] position_boundaries(){ 329 public int[] position_boundaries(){
330 //retourne les numŽros des phrases aprs lesquelles se trouvent les frontires thŽmatiques 330 //retourne les numéros des phrases après lesquelles se trouvent les frontières thématiques
331 return topic_boundaries; 331 return topic_boundaries;
332 332
333 } 333 }
334 334
335 335
336 public int count_boundaries(){ 336 public int count_boundaries(){
337 337
338 return boundaries; 338 return boundaries;
339 339
340 } 340 }
341 341
342 public int count_segments(){ 342 public int count_segments(){
343 343
344 return boundaries+1; 344 return boundaries+1;
345 345
346 } 346 }
347 347
348 public String to_string(){ 348 public String to_string(){
349 java.io.StringWriter w = new java.io.StringWriter(); 349 java.io.StringWriter w = new java.io.StringWriter();
350 w.write("placement des frontires \n"); 350 w.write("placement des frontières \n");
351 for (int i=0 ; i<topic_boundaries.length ; i++){ 351 for (int i=0 ; i<topic_boundaries.length ; i++){
352 w.write(topic_boundaries[i] + "\n"); 352 w.write(topic_boundaries[i] + "\n");
353 } 353 }
354 return w.toString(); 354 return w.toString();
355 } 355 }
356 } 356 }
357 357
tools/SIGMUND/LIA_topic_seg/src/LIA_topic_seg/DefaultConfig.java
1 package LIA_topic_seg; 1 package LIA_topic_seg;
2 2
3 import javax.xml.parsers.*; 3 import javax.xml.parsers.*;
4 import org.w3c.dom.*; 4 import org.w3c.dom.*;
5 import org.xml.sax.*; 5 import org.xml.sax.*;
6 import java.io.*; 6 import java.io.*;
7 import javax.xml.transform.dom.*; 7 import javax.xml.transform.dom.*;
8 import javax.xml.transform.stream.*; 8 import javax.xml.transform.stream.*;
9 import javax.xml.transform.*; 9 import javax.xml.transform.*;
10 import java.util.*; 10 import java.util.*;
11 import org.apache.commons.cli.*; 11 import org.apache.commons.cli.*;
12 12
13 /** 13 /**
14 * Cette classe regroupe des paramtres de configuration 14 * Cette classe regroupe des paramètres de configuration
15 * 15 *
16 * This product includes software developed by the 16 * This product includes software developed by the
17 * Apache Software Foundation (http://www.apache.org/)." 17 * Apache Software Foundation (http://www.apache.org/)."
18 */ 18 */
19 public class DefaultConfig 19 public class DefaultConfig
20 { 20 {
21 private class CmdLine extends PosixParser 21 private class CmdLine extends PosixParser
22 { 22 {
23 final private boolean NEED_ARG = true; 23 final private boolean NEED_ARG = true;
24 final private boolean DO_NOT_NEED_ARG = false; 24 final private boolean DO_NOT_NEED_ARG = false;
25 CmdLine(String args[]) throws ParseException 25 CmdLine(String args[]) throws ParseException
26 { 26 {
27 super(); 27 super();
28 // documentation : http://jakarta.apache.org/commons/cli/apidocs/index.html 28 // documentation : http://jakarta.apache.org/commons/cli/apidocs/index.html
29 _cl = parse(new Options() 29 _cl = parse(new Options()
30 .addOption("", "inputDataSentenceXmlTag", NEED_ARG, "") 30 .addOption("", "inputDataSentenceXmlTag", NEED_ARG, "")
31 .addOption("", "inputDataWordsXmlTag", NEED_ARG, "") 31 .addOption("", "inputDataWordsXmlTag", NEED_ARG, "")
32 .addOption("", "inputDataLemmaWeightXmlTag", NEED_ARG, "") 32 .addOption("", "inputDataLemmaWeightXmlTag", NEED_ARG, "")
33 .addOption("", "inputDataSentenceXmlTag", NEED_ARG, "") 33 .addOption("", "inputDataSentenceXmlTag", NEED_ARG, "")
34 .addOption("", "lexicalChainsHiatus", NEED_ARG, "") 34 .addOption("", "lexicalChainsHiatus", NEED_ARG, "")
35 .addOption("", "computeChains", NEED_ARG, "") 35 .addOption("", "computeChains", NEED_ARG, "")
36 .addOption("", "file", NEED_ARG, "") 36 .addOption("", "file", NEED_ARG, "")
37 .addOption("", "n", NEED_ARG, "") 37 .addOption("", "n", NEED_ARG, "")
38 .addOption("", "s", NEED_ARG, "") 38 .addOption("", "s", NEED_ARG, "")
39 .addOption("", "config", NEED_ARG, ""), 39 .addOption("", "config", NEED_ARG, ""),
40 args); 40 args);
41 } 41 }
42 } 42 }
43 //-------------------------------------------------------------------------- 43 //--------------------------------------------------------------------------
44 private CommandLine _cl; 44 private CommandLine _cl;
45 private HashMap<String, String> _map = new HashMap<String, String>(); 45 private HashMap<String, String> _map = new HashMap<String, String>();
46 //-------------------------------------------------------------------------- 46 //--------------------------------------------------------------------------
47 public DefaultConfig() throws Exception 47 public DefaultConfig() throws Exception
48 { 48 {
49 init(); 49 init();
50 } 50 }
51 //-------------------------------------------------------------------------- 51 //--------------------------------------------------------------------------
52 public DefaultConfig(String fileName) throws Exception 52 public DefaultConfig(String fileName) throws Exception
53 { 53 {
54 init(); 54 init();
55 load(fileName); 55 load(fileName);
56 } 56 }
57 //-------------------------------------------------------------------------- 57 //--------------------------------------------------------------------------
58 private void init() throws Exception 58 private void init() throws Exception
59 { 59 {
60 // tag "phrase" dans le fichier d'entrée 60 // tag "phrase" dans le fichier d'entrÈe
61 setParam("inputDataSentenceXmlTag","phr"); 61 setParam("inputDataSentenceXmlTag","phr");
62 // tag "lemme d'une phrase" dans le fichier d'entrée 62 // tag "lemme d'une phrase" dans le fichier d'entrÈe
63 setParam("inputDataWordsXmlTag", "wd"); 63 setParam("inputDataWordsXmlTag", "wd");
64 // tag "poids d'un lemme dans une phrase" dans le fichier d'entrée 64 // tag "poids d'un lemme dans une phrase" dans le fichier d'entrÈe
65 setParam("inputDataLemmaXmlTag", "lem"); 65 setParam("inputDataLemmaXmlTag", "lem");
66 // tag "poids d'un lemme dans une phrase" dans le fichier d'entrée 66 // tag "poids d'un lemme dans une phrase" dans le fichier d'entrÈe
67 setParam("inputDataLemmaWeightXmlTag", "poids"); 67 setParam("inputDataLemmaWeightXmlTag", "poids");
68 // mode de calcul du hiatus et de sa prise en compte 68 // mode de calcul du hiatus et de sa prise en compte
69 // rien = pas de prise en compte du hiatus 69 // rien = pas de prise en compte du hiatus
70 // un nombre = valeur du hiatus 70 // un nombre = valeur du hiatus
71 // ADAPTIV = valeur du hiatus à calculer localement 71 // ADAPTIV = valeur du hiatus ‡ calculer localement
72 setParam("lexicalChainsHiatus", "11"); 72 setParam("lexicalChainsHiatus", "11");
73 setParam("computeChains", "weight"); 73 setParam("computeChains", "weight");
74 } 74 }
75 //-------------------------------------------------------------------------- 75 //--------------------------------------------------------------------------
76 public void load(String fileName) throws Exception 76 public void load(String fileName) throws Exception
77 { 77 {
78 try 78 try
79 { 79 {
80 Document doc = DocumentBuilderFactory.newInstance() 80 Document doc = DocumentBuilderFactory.newInstance()
81 .newDocumentBuilder().parse(new File(fileName)); 81 .newDocumentBuilder().parse(new File(fileName));
82 Element nn = doc.getDocumentElement(); 82 Element nn = doc.getDocumentElement();
83 if (nn.getTagName() != "Config") 83 if (nn.getTagName() != "Config")
84 throw new Exception("Unexpected tag : "+nn.getTagName()); 84 throw new Exception("Unexpected tag : "+nn.getTagName());
85 String configVersion = "1.0"; // default version 85 String configVersion = "1.0"; // default version
86 Attr a = nn.getAttributeNode("version"); 86 Attr a = nn.getAttributeNode("version");
87 if (a != null) 87 if (a != null)
88 configVersion = a.getTextContent(); 88 configVersion = a.getTextContent();
89 if (configVersion.equals("1.0")) 89 if (configVersion.equals("1.0"))
90 { 90 {
91 NodeList paramNodeList = doc.getElementsByTagName("Param"); 91 NodeList paramNodeList = doc.getElementsByTagName("Param");
92 for (int i=0; i<paramNodeList.getLength(); i++) 92 for (int i=0; i<paramNodeList.getLength(); i++)
93 { 93 {
94 Node n = paramNodeList.item(i); 94 Node n = paramNodeList.item(i);
95 setParam(n.getAttributes().getNamedItem("name").getTextContent(), 95 setParam(n.getAttributes().getNamedItem("name").getTextContent(),
96 n.getTextContent()); 96 n.getTextContent());
97 } 97 }
98 } 98 }
99 else 99 else
100 throw new Exception("Unsupported version : "+configVersion); 100 throw new Exception("Unsupported version : "+configVersion);
101 } 101 }
102 catch(Exception e) { throw e; } 102 catch(Exception e) { throw e; }
103 } 103 }
104 //-------------------------------------------------------------------------- 104 //--------------------------------------------------------------------------
105 /** 105 /**
106 * @param n name of parameter 106 * @param n name of parameter
107 * @param c content of parameter 107 * @param c content of parameter
108 */ 108 */
109 public void setParam(String n, String c) throws Exception 109 public void setParam(String n, String c) throws Exception
110 { 110 {
111 if (n.equals("lexicalChainsHiatus")) 111 if (n.equals("lexicalChainsHiatus"))
112 { 112 {
113 if (!c.equals("") && !c.equals("ADAPTIVE")) 113 if (!c.equals("") && !c.equals("ADAPTIVE"))
114 Integer.parseInt(c); // throws exception if cannot convert to integer 114 Integer.parseInt(c); // throws exception if cannot convert to integer
115 } 115 }
116 else if (n.equals("computeChains")) 116 else if (n.equals("computeChains"))
117 { 117 {
118 if (!c.equals("yes") && !c.equals("no") && !c.equals("weight")) 118 if (!c.equals("yes") && !c.equals("no") && !c.equals("weight"))
119 throw new Exception("invalid parameter 'computeWeight'. Must be 'yes' or 'no'"); 119 throw new Exception("invalid parameter 'computeWeight'. Must be 'yes' or 'no'");
120 } 120 }
121 _map.put(n, c); 121 _map.put(n, c);
122 } 122 }
123 //-------------------------------------------------------------------------- 123 //--------------------------------------------------------------------------
124 /** 124 /**
125 * @param n name of parameter 125 * @param n name of parameter
126 * @return true if parameter exists; false otherwise 126 * @return true if parameter exists; false otherwise
127 */ 127 */
128 public boolean containsParam(String n) 128 public boolean containsParam(String n)
129 { 129 {
130 return _map.containsKey(n); 130 return _map.containsKey(n);
131 } 131 }
132 //-------------------------------------------------------------------------- 132 //--------------------------------------------------------------------------
133 /** 133 /**
134 * Cette fonction permet d'accŽder aux paramtres, qu'ils aient ŽtŽ mis par dŽfaut, ou passŽs par le fichier de configuration, 134 * Cette fonction permet d'accéder aux paramètres, qu'ils aient été mis par défaut, ou passés par le fichier de configuration,
135 * ou encore passŽs en ligne de commande. 135 * ou encore passés en ligne de commande.
136 * @param n name of parameter 136 * @param n name of parameter
137 * @return content of parameter or null if the parameter does not exist 137 * @return content of parameter or null if the parameter does not exist
138 */ 138 */
139 public String getParam(String n) 139 public String getParam(String n)
140 { 140 {
141 return _map.get(n); 141 return _map.get(n);
142 } 142 }
143 //-------------------------------------------------------------------------- 143 //--------------------------------------------------------------------------
144 /** 144 /**
145 * Cette fonction permet de rŽcupŽrer les paramtres passŽs en ligne de commande 145 * Cette fonction permet de récupérer les paramètres passés en ligne de commande
146 * les valeurs sont prioritaires sur le fichier de configuration en cas de conflit. 146 * les valeurs sont prioritaires sur le fichier de configuration en cas de conflit.
147 */ 147 */
148 public String[] setParamsFromCmdLine(String[] args) throws Exception 148 public String[] setParamsFromCmdLine(String[] args) throws Exception
149 { 149 {
150 new CmdLine(args); 150 new CmdLine(args);
151 Option[] t = _cl.getOptions(); 151 Option[] t = _cl.getOptions();
152 for (int i=0; i<t.length; i++) 152 for (int i=0; i<t.length; i++)
153 setParam(t[i].getLongOpt(), t[i].getValue("")); 153 setParam(t[i].getLongOpt(), t[i].getValue(""));
154 return _cl.getArgs(); // returns unrecognized args (file list for example) 154 return _cl.getArgs(); // returns unrecognized args (file list for example)
155 } 155 }
156 //-------------------------------------------------------------------------- 156 //--------------------------------------------------------------------------
157 public void save(String fileName) throws Exception 157 public void save(String fileName) throws Exception
158 { 158 {
159 FileWriter w = new FileWriter(new File(fileName)); 159 FileWriter w = new FileWriter(new File(fileName));
160 w.write("<?xml version=\"1.0\"?>"); 160 w.write("<?xml version=\"1.0\"?>");
161 w.write("\n<Config version=\"1.0\">"); 161 w.write("\n<Config version=\"1.0\">");
162 Set<String> set = _map.keySet(); 162 Set<String> set = _map.keySet();
163 for (Iterator<String> i = set.iterator(); i.hasNext();) 163 for (Iterator<String> i = set.iterator(); i.hasNext();)
164 { 164 {
165 String name = i.next(); 165 String name = i.next();
166 w.write("\n <Param name=\""+name+"\">"+getParam(name)+"</Param>"); 166 w.write("\n <Param name=\""+name+"\">"+getParam(name)+"</Param>");
167 } 167 }
168 w.write("\n</Config>"); 168 w.write("\n</Config>");
169 w.close(); 169 w.close();
170 } 170 }
171 //-------------------------------------------------------------------------- 171 //--------------------------------------------------------------------------
172 public String toString() 172 public String toString()
173 { 173 {
174 StringWriter w = new StringWriter(); 174 StringWriter w = new StringWriter();
175 w.write(super.toString()+"\n"); 175 w.write(super.toString()+"\n");
176 Set<String> set = _map.keySet(); 176 Set<String> set = _map.keySet();
177 for (Iterator<String> i = set.iterator(); i.hasNext();) 177 for (Iterator<String> i = set.iterator(); i.hasNext();)
178 { 178 {
179 String name = i.next(); 179 String name = i.next();
180 w.write(" "+name+"("+getParam(name)+")\n"); 180 w.write(" "+name+"("+getParam(name)+")\n");
181 } 181 }
182 return w.toString(); 182 return w.toString();
183 } 183 }
184 } 184 }
tools/SIGMUND/LIA_topic_seg/src/LIA_topic_seg/DefaultGapsScores.java
1 package LIA_topic_seg; 1 package LIA_topic_seg;
2 2
3 import java.util.*; 3 import java.util.*;
4 /** 4 /**
5 * Cette classe permet le calcul de probabililtŽs de rupture ˆ chaque intervalle entre deux phrases, ou unitŽs textuelles. 5 * Cette classe permet le calcul de probabililtés de rupture à chaque intervalle entre deux phrases, ou unités textuelles.
6 * Les calculs implŽmentŽs sont la similaritŽ cosine et les profondeurs de dissimilaritŽ. 6 * Les calculs implémentés sont la similarité cosine et les profondeurs de dissimilarité.
7 * 7 *
8 * 8 *
9 */ 9 */
10 public class DefaultGapsScores implements GapsScores{ 10 public class DefaultGapsScores implements GapsScores{
11 11
12 LexicalChainList chains; 12 LexicalChainList chains;
13 float[] gaps_scores = null; 13 float[] gaps_scores = null;
14 int sentence_count = 0; 14 int sentence_count = 0;
15 static int SIM_WINDOW = 3; 15 static int SIM_WINDOW = 3;
16 16
17 public DefaultGapsScores (LexicalChainList lcl, int sc){ 17 public DefaultGapsScores (LexicalChainList lcl, int sc){
18 //crŽation du tableau des probas de rupture pour chaque phrase/sŽquence 18 //création du tableau des probas de rupture pour chaque phrase/séquence
19 chains = lcl; 19 chains = lcl;
20 sentence_count = sc; 20 sentence_count = sc;
21 // System.out.print("nombre de phrases traitŽse : " + sc); 21 // System.out.print("nombre de phrases traitése : " + sc);
22 compute_cos(); 22 compute_cos();
23 23
24 // for (int i= 0 ; i<sc; i++){ 24 // for (int i= 0 ; i<sc; i++){
25 // gaps_scores[i]=0; 25 // gaps_scores[i]=0;
26 // } 26 // }
27 27
28 } 28 }
29 29
30 public DefaultGapsScores (LexicalChainList lcl, DefaultInputData in){ 30 public DefaultGapsScores (LexicalChainList lcl, DefaultInputData in){
31 //crŽation du tableau des probas de rupture pour chaque phrase/sŽquence 31 //création du tableau des probas de rupture pour chaque phrase/séquence
32 chains = lcl; 32 chains = lcl;
33 sentence_count = in.sentenceCount(); 33 sentence_count = in.sentenceCount();
34 compute_cos(); 34 compute_cos();
35 35
36 } 36 }
37 37
38 /** 38 /**
39 * transforme l'attribut gaps_scores en des scores de similaritŽs => on recherchera les plus petits 39 * transforme l'attribut gaps_scores en des scores de similarités => on recherchera les plus petits
40 * 40 *
41 */ 41 */
42 public void compute_cos(){ 42 public void compute_cos(){
43 // transforme gaps_scores en des scores de similaritŽs => on recherchera les + petits 43 // transforme gaps_scores en des scores de similarités => on recherchera les + petits
44 gaps_scores = new float[sentence_count-1]; 44 gaps_scores = new float[sentence_count-1];
45 for (int senti = 0 ; senti< sentence_count-1 ; senti++){ 45 for (int senti = 0 ; senti< sentence_count-1 ; senti++){
46 float sup = 0; 46 float sup = 0;
47 float inf1 = 0; 47 float inf1 = 0;
48 float inf2 = 0; 48 float inf2 = 0;
49 49
50 50
51 for (int lem=0 ; lem< chains.lemmaCount() ; lem++){ 51 for (int lem=0 ; lem< chains.lemmaCount() ; lem++){
52 float wa = 0; 52 float wa = 0;
53 float wb = 0; 53 float wb = 0;
54 54
55 for (int sentj = senti ; sentj>senti-SIM_WINDOW && sentj>=0; sentj--){ 55 for (int sentj = senti ; sentj>senti-SIM_WINDOW && sentj>=0; sentj--){
56 if (chains.weight(lem,sentj) > wa){ 56 if (chains.weight(lem,sentj) > wa){
57 wa = chains.weight(lem,sentj); 57 wa = chains.weight(lem,sentj);
58 } 58 }
59 } 59 }
60 for (int sentk = senti+1 ; sentk<=senti+SIM_WINDOW && sentk<sentence_count ; sentk++){ 60 for (int sentk = senti+1 ; sentk<=senti+SIM_WINDOW && sentk<sentence_count ; sentk++){
61 if (chains.weight(lem,sentk) > wb){ 61 if (chains.weight(lem,sentk) > wb){
62 wb = chains.weight(lem,sentk); 62 wb = chains.weight(lem,sentk);
63 } 63 }
64 } 64 }
65 65
66 sup += wa * wb; 66 sup += wa * wb;
67 inf1 += wa * wa; 67 inf1 += wa * wa;
68 inf2 += wb * wb; 68 inf2 += wb * wb;
69 69
70 } 70 }
71 if (inf1 * inf2 != 0){ 71 if (inf1 * inf2 != 0){
72 gaps_scores[senti]= sup / (float)Math.sqrt(inf1 * inf2); 72 gaps_scores[senti]= sup / (float)Math.sqrt(inf1 * inf2);
73 } 73 }
74 else { 74 else {
75 gaps_scores[senti]= 0; 75 gaps_scores[senti]= 0;
76 } 76 }
77 77
78 } 78 }
79 79
80 } 80 }
81 81
82 /** 82 /**
83 * Cette fonction opre un lissage sur l'attribut gaps_scores, pour chaque valeur elle la remplace 83 * Cette fonction opère un lissage sur l'attribut gaps_scores, pour chaque valeur elle la remplace
84 * par la moyenne avec les valeurs prŽcŽdente et suivante. 84 * par la moyenne avec les valeurs précédente et suivante.
85 * @param w : fentre de lissage : elle est Žgale ˆ 1 quoi qu'il arrive 85 * @param w : fenêtre de lissage : elle est égale à 1 quoi qu'il arrive
86 */ 86 */
87 public void compute_smoothing(int w){ 87 public void compute_smoothing(int w){
88 //w est la fentre de lissage 88 //w est la fenêtre de lissage
89 float[] smooth_cos = new float[gaps_scores.length] ; 89 float[] smooth_cos = new float[gaps_scores.length] ;
90 smooth_cos[0]= (gaps_scores[1]+2*gaps_scores[0])/3; 90 smooth_cos[0]= (gaps_scores[1]+2*gaps_scores[0])/3;
91 for (int i=1 ; i<gaps_scores.length-1 ; i++){ 91 for (int i=1 ; i<gaps_scores.length-1 ; i++){
92 smooth_cos[i]= (gaps_scores[i-1]+gaps_scores[i+1]+2*gaps_scores[i])/4 ; 92 smooth_cos[i]= (gaps_scores[i-1]+gaps_scores[i+1]+2*gaps_scores[i])/4 ;
93 93
94 } 94 }
95 smooth_cos[gaps_scores.length-1]=(gaps_scores[gaps_scores.length-2]+gaps_scores[gaps_scores.length-1])/2; 95 smooth_cos[gaps_scores.length-1]=(gaps_scores[gaps_scores.length-2]+gaps_scores[gaps_scores.length-1])/2;
96 //System.out.print("dernier calculŽ" + smooth_cos[gaps_scores.length-1]); 96 //System.out.print("dernier calculé" + smooth_cos[gaps_scores.length-1]);
97 97
98 gaps_scores = smooth_cos.clone(); 98 gaps_scores = smooth_cos.clone();
99 } 99 }
100 100
101 /** 101 /**
102 * Cette fonction, aprs calcul des similaritŽs, permet de sŽlectionner les frontires candidates 102 * Cette fonction, après calcul des similarités, permet de sélectionner les frontières candidates
103 * en recherchant les minimas locaux et en leur attribuant des valeurs liŽes ˆ la profondeur 103 * en recherchant les minimas locaux et en leur attribuant des valeurs liées à la profondeur
104 * de dissimilaritŽ. 104 * de dissimilarité.
105 * Les rŽsultats sont directement reportŽs dans l'attribut gaps_scores 105 * Les résultats sont directement reportés dans l'attribut gaps_scores
106 * @return : le nombre de candidats pour lesquels une valeur a ŽtŽ calculŽe. 106 * @return : le nombre de candidats pour lesquels une valeur a été calculée.
107 */ 107 */
108 public float compute_depth_scores(){ // retourne le nombre de depth calculŽes 108 public float compute_depth_scores(){ // retourne le nombre de depth calculées
109 //transforme gaps_scores en des scores de profondeur => on recherchera les + grands 109 //transforme gaps_scores en des scores de profondeur => on recherchera les + grands
110 int count = 0; 110 int count = 0;
111 float[] depth_scores = new float [gaps_scores.length]; 111 float[] depth_scores = new float [gaps_scores.length];
112 depth_scores[0]=0; 112 depth_scores[0]=0;
113 depth_scores[gaps_scores.length-1]=0; 113 depth_scores[gaps_scores.length-1]=0;
114 for (int i=1 ; i<gaps_scores.length-1 ; i++){ 114 for (int i=1 ; i<gaps_scores.length-1 ; i++){
115 if (gaps_scores[i-1]>gaps_scores[i] && gaps_scores[i+1]>gaps_scores[i]){ 115 if (gaps_scores[i-1]>gaps_scores[i] && gaps_scores[i+1]>gaps_scores[i]){
116 // on ne calcule les scores que des candidats, c'est ˆ dire les minimas locaux 116 // on ne calcule les scores que des candidats, c'est à dire les minimas locaux
117 float lmax = 0; 117 float lmax = 0;
118 float rmax = 0; 118 float rmax = 0;
119 119
120 int j = i-1; 120 int j = i-1;
121 while (gaps_scores[j]>lmax){ 121 while (gaps_scores[j]>lmax){
122 lmax = gaps_scores[j]; 122 lmax = gaps_scores[j];
123 } 123 }
124 j = i+1; 124 j = i+1;
125 while (gaps_scores[j]>rmax){ 125 while (gaps_scores[j]>rmax){
126 rmax = gaps_scores[j]; 126 rmax = gaps_scores[j];
127 } 127 }
128 depth_scores[i]= (rmax + lmax - 2 * gaps_scores[i])/2; 128 depth_scores[i]= (rmax + lmax - 2 * gaps_scores[i])/2;
129 count ++; 129 count ++;
130 } 130 }
131 else{ 131 else{
132 depth_scores[i]=0; 132 depth_scores[i]=0;
133 } 133 }
134 } 134 }
135 135
136 gaps_scores = depth_scores.clone(); 136 gaps_scores = depth_scores.clone();
137 return count; 137 return count;
138 138
139 } 139 }
140 140
141 // private void compute_C99(){ 141 // private void compute_C99(){
142 // 142 //
143 // 143 //
144 // } 144 // }
145 145
146 146
147 public float[] values(){ 147 public float[] values(){
148 148
149 return gaps_scores; 149 return gaps_scores;
150 150
151 } 151 }
152 152
153 public float bound_value(int bound){ 153 public float bound_value(int bound){
154 154
155 return gaps_scores[bound]; 155 return gaps_scores[bound];
156 156
157 } 157 }
158 158
159 public String to_string(){ 159 public String to_string(){
160 java.io.StringWriter w = new java.io.StringWriter(); 160 java.io.StringWriter w = new java.io.StringWriter();
161 w.write(super.toString()+"\n"); 161 w.write(super.toString()+"\n");
162 for (int i=0 ; i<gaps_scores.length ; i++){ 162 for (int i=0 ; i<gaps_scores.length ; i++){
163 163
164 w.write("GAP " + i + " - " + (i+1) + " : " + gaps_scores[i] +"\n"); 164 w.write("GAP " + i + " - " + (i+1) + " : " + gaps_scores[i] +"\n");
165 165
166 } 166 }
167 return w.toString(); 167 return w.toString();
168 } 168 }
169 169
170 } 170 }
171 171
tools/SIGMUND/LIA_topic_seg/src/LIA_topic_seg/DefaultInputData.java
1 package LIA_topic_seg; 1 package LIA_topic_seg;
2 2
3 import javax.xml.parsers.*; 3 import javax.xml.parsers.*;
4 import org.w3c.dom.*; 4 import org.w3c.dom.*;
5 import org.xml.sax.*; 5 import org.xml.sax.*;
6 import java.io.*; 6 import java.io.*;
7 import javax.xml.transform.dom.*; 7 import javax.xml.transform.dom.*;
8 import javax.xml.transform.stream.*; 8 import javax.xml.transform.stream.*;
9 import javax.xml.transform.*; 9 import javax.xml.transform.*;
10 import java.util.*; 10 import java.util.*;
11 11
12 /** 12 /**
13 * Cette classe permet de charger les informations du fichier d'entrŽe, ainsi que d'Žditer le rŽsultat de la segmentation. 13 * Cette classe permet de charger les informations du fichier d'entrée, ainsi que d'éditer le résultat de la segmentation.
14 * Le fichier d'entrŽe doit tre au format XML et les balises utilisŽes sont dŽterminŽes dans le fichier de configuration. 14 * Le fichier d'entrée doit être au format XML et les balises utilisées sont déterminées dans le fichier de configuration.
15 */ 15 */
16 public class DefaultInputData 16 public class DefaultInputData
17 { 17 {
18 //-------------------------------------------------------------------------- 18 //--------------------------------------------------------------------------
19 19
20 /** 20 /**
21 * la configuration, et donc les paramtres sont copiŽs dans l'objet 21 * la configuration, et donc les paramètres sont copiés dans l'objet
22 */ 22 */
23 DefaultConfig config; 23 DefaultConfig config;
24 24
25 /** 25 /**
26 * Le dictionnaire des lemmes est Žgalement portŽ par la reprŽsentation des donnŽes d'entrŽe 26 * Le dictionnaire des lemmes est également porté par la représentation des données d'entrée
27 */ 27 */
28 LemmaDict lemmaDict = new LemmaDict(); 28 LemmaDict lemmaDict = new LemmaDict();
29 private Sentence[] _sentenceList; 29 private Sentence[] _sentenceList;
30 //-------------------------------------------------------------------------- 30 //--------------------------------------------------------------------------
31 31
32 public DefaultInputData(DefaultConfig c, String file) throws Exception 32 public DefaultInputData(DefaultConfig c, String file) throws Exception
33 { 33 {
34 config = c; 34 config = c;
35 try 35 try
36 { 36 {
37 NodeList sentenceNodeList = DocumentBuilderFactory.newInstance() 37 NodeList sentenceNodeList = DocumentBuilderFactory.newInstance()
38 .newDocumentBuilder().parse(new File(file)) 38 .newDocumentBuilder().parse(new File(file))
39 .getElementsByTagName(config 39 .getElementsByTagName(config
40 .getParam("inputDataSentenceXmlTag")); 40 .getParam("inputDataSentenceXmlTag"));
41 int sentenceCount = sentenceNodeList.getLength(); 41 int sentenceCount = sentenceNodeList.getLength();
42 _sentenceList = new Sentence[sentenceCount]; 42 _sentenceList = new Sentence[sentenceCount];
43 43
44 for (int i=0; i<sentenceCount; i++) 44 for (int i=0; i<sentenceCount; i++)
45 { 45 {
46 Sentence sentence = new Sentence(); 46 Sentence sentence = new Sentence();
47 NodeList childList = sentenceNodeList.item(i).getChildNodes(); 47 NodeList childList = sentenceNodeList.item(i).getChildNodes();
48 int childCount = childList.getLength(); 48 int childCount = childList.getLength();
49 for (int j=0; j<childCount; j++) 49 for (int j=0; j<childCount; j++)
50 { 50 {
51 Node node = childList.item(j); 51 Node node = childList.item(j);
52 String nodeName = node.getNodeName(); 52 String nodeName = node.getNodeName();
53 if (nodeName.equals(config.getParam("inputDataWordsXmlTag"))) 53 if (nodeName.equals(config.getParam("inputDataWordsXmlTag")))
54 sentence.content = node.getFirstChild().getTextContent(); 54 sentence.content = node.getFirstChild().getTextContent();
55 else if (nodeName.equals(config.getParam("inputDataLemmaXmlTag"))) 55 else if (nodeName.equals(config.getParam("inputDataLemmaXmlTag")))
56 { 56 {
57 float w = 0; // weight 57 float w = 0; // weight
58 Node n = node.getAttributes().getNamedItem(config 58 Node n = node.getAttributes().getNamedItem(config
59 .getParam("inputDataLemmaWeightXmlTag")); 59 .getParam("inputDataLemmaWeightXmlTag"));
60 if (n != null) 60 if (n != null)
61 w = Float.parseFloat(n.getFirstChild().getTextContent()); 61 w = Float.parseFloat(n.getFirstChild().getTextContent());
62 int lemmaCode = lemmaDict.add( 62 int lemmaCode = lemmaDict.add(
63 node.getFirstChild().getTextContent(), w, i); 63 node.getFirstChild().getTextContent(), w, i);
64 sentence.addLemma(lemmaCode, w); 64 sentence.addLemma(lemmaCode, w);
65 } 65 }
66 } 66 }
67 _sentenceList[i] = sentence; 67 _sentenceList[i] = sentence;
68 } 68 }
69 } 69 }
70 catch(Exception e) { throw e; } 70 catch(Exception e) { throw e; }
71 } 71 }
72 //-------------------------------------------------------------------------- 72 //--------------------------------------------------------------------------
73 /** 73 /**
74 * Cette fonction est utilisŽe principalement pour le dŽbuggage, pour obtenir une trace des donnŽes d'entrŽe. 74 * Cette fonction est utilisée principalement pour le débuggage, pour obtenir une trace des données d'entrée.
75 */ 75 */
76 public String toString() 76 public String toString()
77 77
78 { 78 {
79 java.io.StringWriter w = new java.io.StringWriter(); 79 java.io.StringWriter w = new java.io.StringWriter();
80 w.write(super.toString()+"\n"); 80 w.write(super.toString()+"\n");
81 for (int i=0; i<sentenceCount(); i++) 81 for (int i=0; i<sentenceCount(); i++)
82 { 82 {
83 Sentence sent = _sentenceList[i]; 83 Sentence sent = _sentenceList[i];
84 w.write("SENTENCE #"+i 84 w.write("SENTENCE #"+i
85 +" wordCount("+sent.wordCount()+")" 85 +" wordCount("+sent.wordCount()+")"
86 +" content("+sent.content+")\n"); 86 +" content("+sent.content+")\n");
87 87
88 for (int j=0; j<sent.lemmaCount(); j++) 88 for (int j=0; j<sent.lemmaCount(); j++)
89 { 89 {
90 Sentence.Lemma l = sent.lemmaObject(j); 90 Sentence.Lemma l = sent.lemmaObject(j);
91 w.write(" LEMMA #"+j 91 w.write(" LEMMA #"+j
92 +" content("+lemmaDict.lemmaObject(l.code).content+")" 92 +" content("+lemmaDict.lemmaObject(l.code).content+")"
93 +" code("+l.code+")" 93 +" code("+l.code+")"
94 +" weight("+l.weight+")" 94 +" weight("+l.weight+")"
95 //+" occurences("+sent.lemmaOccurences(l.code)+")" 95 //+" occurences("+sent.lemmaOccurences(l.code)+")"
96 +"\n"); 96 +"\n");
97 } 97 }
98 } 98 }
99 return w.toString(); 99 return w.toString();
100 } 100 }
101 101
102 102
103 /** 103 /**
104 * Cette fonction permet d'Žditer le rŽsultat de la segmentation au mme format que le fichier d'entrŽe, avec des balises <seg> pour dŽlilmiter les segments thŽmatiques 104 * Cette fonction permet d'éditer le résultat de la segmentation au même format que le fichier d'entrée, avec des balises <seg> pour délilmiter les segments thématiques
105 * @param bounds : il s'agit de l'objet contenant le calcul des frontires thŽmatiques 105 * @param bounds : il s'agit de l'objet contenant le calcul des frontières thématiques
106 * @return : La fonction renvoie un objet de type String, qui peut ensuite tre affichŽ ˆ l'Žcran ou bien redirigŽ vers un fichier de sortie. 106 * @return : La fonction renvoie un objet de type String, qui peut ensuite être affiché à l'écran ou bien redirigé vers un fichier de sortie.
107 */ 107 */
108 public String result_complete (Boundaries bounds){ 108 public String result_complete (Boundaries bounds){
109 int[] boundaries = bounds.position_boundaries().clone(); 109 int[] boundaries = bounds.position_boundaries().clone();
110 Arrays.sort(boundaries); 110 Arrays.sort(boundaries);
111 int count = 0; 111 int count = 0;
112 int next = boundaries[0]; 112 int next = boundaries[0];
113 113
114 java.io.StringWriter w = new java.io.StringWriter(); 114 java.io.StringWriter w = new java.io.StringWriter();
115 w.write ("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n<!DOCTYPE Segmentation>\n<Segmentation>\n<seg>\n"); 115 w.write ("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n<!DOCTYPE Segmentation>\n<Segmentation>\n<seg>\n");
116 for (int i=0; i<sentenceCount(); i++){ 116 for (int i=0; i<sentenceCount(); i++){
117 117
118 w.write("<" + config.getParam("inputDataSentenceXmlTag") + ">"); 118 w.write("<" + config.getParam("inputDataSentenceXmlTag") + ">");
119 Sentence sent = _sentenceList[i]; 119 Sentence sent = _sentenceList[i];
120 w.write("<" + config.getParam("inputDataWordsXmlTag") + ">" + sent.content + "</" + config.getParam("inputDataWordsXmlTag") + ">"); 120 w.write("<" + config.getParam("inputDataWordsXmlTag") + ">" + sent.content + "</" + config.getParam("inputDataWordsXmlTag") + ">");
121 for (int j=0; j<sent.lemmaCount(); j++) 121 for (int j=0; j<sent.lemmaCount(); j++)
122 { 122 {
123 Sentence.Lemma l = sent.lemmaObject(j); 123 Sentence.Lemma l = sent.lemmaObject(j);
124 w.write("<"+config.getParam("inputDataLemmaXmlTag") + " " 124 w.write("<"+config.getParam("inputDataLemmaXmlTag") + " "
125 + config.getParam("inputDataLemmaWeightXmlTag")+ "=" + l.weight + ">" 125 + config.getParam("inputDataLemmaWeightXmlTag")+ "=" + l.weight + ">"
126 + lemmaDict.lemmaObject(l.code).content 126 + lemmaDict.lemmaObject(l.code).content
127 +"</" + config.getParam("inputDataLemmaXmlTag") + ">"); 127 +"</" + config.getParam("inputDataLemmaXmlTag") + ">");
128 } 128 }
129 w.write("</" + config.getParam("inputDataSentenceXmlTag") + ">\n"); 129 w.write("</" + config.getParam("inputDataSentenceXmlTag") + ">\n");
130 if (i == next) 130 if (i == next)
131 { 131 {
132 if (count<boundaries.length-1) 132 if (count<boundaries.length-1)
133 { 133 {
134 count ++; 134 count ++;
135 next = boundaries[count]; 135 next = boundaries[count];
136 } 136 }
137 w.write("</seg>\n<seg>\n"); 137 w.write("</seg>\n<seg>\n");
138 138
139 } 139 }
140 } 140 }
141 w.write ("</seg>\n</Segmentation>"); 141 w.write ("</seg>\n</Segmentation>");
142 return w.toString(); 142 return w.toString();
143 } 143 }
144 144
145 /** 145 /**
146 * Cette fonction permet d'Žditer le rŽsultat de la segmentation format XML, avec des balises <seg> pour dŽlilmiter les segments thŽmatiques 146 * Cette fonction permet d'éditer le résultat de la segmentation format XML, avec des balises <seg> pour délilmiter les segments thématiques
147 * et les mme balises que le fichier d'entrŽe pour dŽlimiter les phrases et leur contenu textuel. 147 * et les même balises que le fichier d'entrée pour délimiter les phrases et leur contenu textuel.
148 * @param bounds : il s'agit de l'objet contenant le calcul des frontires thŽmatiques 148 * @param bounds : il s'agit de l'objet contenant le calcul des frontières thématiques
149 * @return : La fonction renvoie un objet de type String, qui peut ensuite tre affichŽ ˆ l'Žcran ou bien redirigŽ vers un fichier de sortie. 149 * @return : La fonction renvoie un objet de type String, qui peut ensuite être affiché à l'écran ou bien redirigé vers un fichier de sortie.
150 */ 150 */
151 public String result_text_only(Boundaries bounds){ 151 public String result_text_only(Boundaries bounds){
152 int[] boundaries = bounds.position_boundaries().clone(); 152 int[] boundaries = bounds.position_boundaries().clone();
153 Arrays.sort(boundaries); 153 Arrays.sort(boundaries);
154 int count = 0; 154 int count = 0;
155 int next = boundaries[0]; 155 int next = boundaries[0];
156 156
157 java.io.StringWriter w = new java.io.StringWriter(); 157 java.io.StringWriter w = new java.io.StringWriter();
158 w.write ("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n<!DOCTYPE Segmentation>\n<Segmentation>\n<seg>\n"); 158 w.write ("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n<!DOCTYPE Segmentation>\n<Segmentation>\n<seg>\n");
159 for (int i=0; i<sentenceCount(); i++){ 159 for (int i=0; i<sentenceCount(); i++){
160 160
161 w.write("<" + config.getParam("inputDataSentenceXmlTag") + ">"); 161 w.write("<" + config.getParam("inputDataSentenceXmlTag") + ">");
162 Sentence sent = _sentenceList[i]; 162 Sentence sent = _sentenceList[i];
163 w.write("<" + config.getParam("inputDataWordsXmlTag") + ">" + sent.content + "</" + config.getParam("inputDataWordsXmlTag") + ">"); 163 w.write("<" + config.getParam("inputDataWordsXmlTag") + ">" + sent.content + "</" + config.getParam("inputDataWordsXmlTag") + ">");
164 w.write("</" + config.getParam("inputDataSentenceXmlTag") + ">\n"); 164 w.write("</" + config.getParam("inputDataSentenceXmlTag") + ">\n");
165 if (i == next) 165 if (i == next)
166 { 166 {
167 if(count<boundaries.length-1) 167 if(count<boundaries.length-1)
168 { 168 {
169 count ++; 169 count ++;
170 next = boundaries[count]; 170 next = boundaries[count];
171 } 171 }
172 w.write("</seg>\n<seg>\n"); 172 w.write("</seg>\n<seg>\n");
173 173
174 } 174 }
175 } 175 }
176 w.write ("</seg>\n</Segmentation>"); 176 w.write ("</seg>\n</Segmentation>");
177 return w.toString(); 177 return w.toString();
178 } 178 }
179 179
180 /** 180 /**
181 * Cette fonction permet d'Žditer le rŽsultat de la segmentation au format utilisŽ dans les expŽriences de F. Choi, ainsi que dans les premires versions des outils d'Žvaluation livrŽs (Segmele et Segeval) 181 * Cette fonction permet d'éditer le résultat de la segmentation au format utilisé dans les expériences de F. Choi, ainsi que dans les premières versions des outils d'évaluation livrés (Segmele et Segeval)
182 * @param bounds : il s'agit de l'objet contenant le calcul des frontires thŽmatiques 182 * @param bounds : il s'agit de l'objet contenant le calcul des frontières thématiques
183 * @return : La fonction renvoie un objet de type String, qui peut ensuite tre affichŽ ˆ l'Žcran ou bien redirigŽ vers un fichier de sortie. 183 * @return : La fonction renvoie un objet de type String, qui peut ensuite être affiché à l'écran ou bien redirigé vers un fichier de sortie.
184 */ 184 */
185 public String result_lines(Boundaries bounds){ 185 public String result_lines(Boundaries bounds){
186 int[] boundaries = bounds.position_boundaries().clone(); 186 int[] boundaries = bounds.position_boundaries().clone();
187 Arrays.sort(boundaries); 187 Arrays.sort(boundaries);
188 int count = 0; 188 int count = 0;
189 int next = boundaries[0]; 189 int next = boundaries[0];
190 190
191 java.io.StringWriter w = new java.io.StringWriter(); 191 java.io.StringWriter w = new java.io.StringWriter();
192 w.write ("==========\n"); 192 w.write ("==========\n");
193 for (int i=0; i<sentenceCount(); i++){ 193 for (int i=0; i<sentenceCount(); i++){
194 194
195 Sentence sent = _sentenceList[i]; 195 Sentence sent = _sentenceList[i];
196 w.write( sent.content + "\n"); 196 w.write( sent.content + "\n");
197 if (i == next){ 197 if (i == next){
198 if (count<boundaries.length-1){ 198 if (count<boundaries.length-1){
199 count ++; 199 count ++;
200 next = boundaries[count]; 200 next = boundaries[count];
201 } 201 }
202 w.write("==========\n"); 202 w.write("==========\n");
203 } 203 }
204 204
205 } 205 }
206 w.write ("==========\n"); 206 w.write ("==========\n");
207 return w.toString(); 207 return w.toString();
208 } 208 }
209 209
210 210
211 //-------------------------------------------------------------------------- 211 //--------------------------------------------------------------------------
212 public Sentence sentence(int i) 212 public Sentence sentence(int i)
213 { 213 {
214 return _sentenceList[i]; 214 return _sentenceList[i];
215 } 215 }
216 //-------------------------------------------------------------------------- 216 //--------------------------------------------------------------------------
217 public int sentenceCount() 217 public int sentenceCount()
218 { 218 {
219 return _sentenceList.length; 219 return _sentenceList.length;
220 } 220 }
221 } 221 }
222 222
223 /* 223 /*
224 InputData in 224 InputData in
225 for (int i=0; i<in.sentenceCount(); i++) 225 for (int i=0; i<in.sentenceCount(); i++)
226 { 226 {
227 Sentence sent = in.sentence(i); 227 Sentence sent = in.sentence(i);
228 sent.content; 228 sent.content;
229 for (int j=0; j<sent.lemmaCount(); j++) 229 for (int j=0; j<sent.lemmaCount(); j++)
230 { 230 {
231 Sentence.Lemma l = sent.lemmaObject(j); 231 Sentence.Lemma l = sent.lemmaObject(j);
232 l.code 232 l.code
233 l.weight 233 l.weight
234 } 234 }
235 } 235 }
236 236
237 237
238 238
239 */ 239 */
240 240
241 241
242 242
243 243
244 244
tools/SIGMUND/LIA_topic_seg/src/LIA_topic_seg/DefaultLexicalChainList.java
1 package LIA_topic_seg; 1 package LIA_topic_seg;
2 2
3 import java.util.*; 3 import java.util.*;
4 4
5 /** 5 /**
6 * Cette classe prend en charge le calcul des liens lexicaux du texte chargŽ dans un objet de type DefaultInputData 6 * Cette classe prend en charge le calcul des liens lexicaux du texte chargé dans un objet de type DefaultInputData
7 * Les paramtres de calcul sont intŽgrŽs dans la configuration. Ils concernent le type de hiatus utilisŽ, et le 7 * Les paramètres de calcul sont intégrés dans la configuration. Ils concernent le type de hiatus utilisé, et le
8 * type de reprŽsentation du texte. 8 * type de représentation du texte.
9 * l'accs aux ŽlŽments dŽcisif du texte se fait pour chaque lemme par un tableau qui indique ˆ chaque phrase si il est 9 * l'accès aux éléments décisif du texte se fait pour chaque lemme par un tableau qui indique à chaque phrase si il est
10 * prŽsent ou non, et le poids (ou la prŽsence) d'un lien lexical. 10 * présent ou non, et le poids (ou la présence) d'un lien lexical.
11 */ 11 */
12 public class DefaultLexicalChainList implements LexicalChainList 12 public class DefaultLexicalChainList implements LexicalChainList
13 { 13 {
14 int sentenceCount; 14 int sentenceCount;
15 LemmaDict dict; 15 LemmaDict dict;
16 DefaultConfig config; 16 DefaultConfig config;
17 DefaultInputData input; 17 DefaultInputData input;
18 18
19 private static final int NO_HIATUS = 100; 19 private static final int NO_HIATUS = 100;
20 private static final int ADAPTIVE_HIATUS = 101; 20 private static final int ADAPTIVE_HIATUS = 101;
21 private static final int FIXED_HIATUS = 102; 21 private static final int FIXED_HIATUS = 102;
22 private int _hiatus; 22 private int _hiatus;
23 private int _hiatusValue; 23 private int _hiatusValue;
24 private boolean _useWeight; 24 private boolean _useWeight;
25 private boolean _computeChains; 25 private boolean _computeChains;
26 private ArrayList<Lemma> _lemmaList = new ArrayList<Lemma>(); 26 private ArrayList<Lemma> _lemmaList = new ArrayList<Lemma>();
27 //-------------------------------------------------------------------------- 27 //--------------------------------------------------------------------------
28 /** 28 /**
29 * Un Lemma est indique la rŽpartition d'un lemme dans le texte, ainsi que la rŽpartition et les 29 * Un Lemma est indique la répartition d'un lemme dans le texte, ainsi que la répartition et les
30 * Žventuelles pondŽration de ses liens lexicaux. 30 * éventuelles pondération de ses liens lexicaux.
31 * C'est cette classe qui se charge en rŽalitŽ du calcul des liens lexicaux. 31 * C'est cette classe qui se charge en réalité du calcul des liens lexicaux.
32 */ 32 */
33 private class Lemma 33 private class Lemma
34 { 34 {
35 private LemmaDict.Lemma _ll; 35 private LemmaDict.Lemma _ll;
36 boolean[] presenceInSentenceVect; // = new boolean[sentenceCount]; 36 boolean[] presenceInSentenceVect; // = new boolean[sentenceCount];
37 float[] weightInSentenceVect; // = new float[sentenceCount]; 37 float[] weightInSentenceVect; // = new float[sentenceCount];
38 //------------------------------------------------------------------------ 38 //------------------------------------------------------------------------
39 Lemma(LemmaDict.Lemma ll) 39 Lemma(LemmaDict.Lemma ll)
40 { 40 {
41 _ll = ll; 41 _ll = ll;
42 presenceInSentenceVect = new boolean[sentenceCount]; 42 presenceInSentenceVect = new boolean[sentenceCount];
43 weightInSentenceVect = new float[sentenceCount]; 43 weightInSentenceVect = new float[sentenceCount];
44 Arrays.fill(presenceInSentenceVect, false); 44 Arrays.fill(presenceInSentenceVect, false);
45 Arrays.fill(weightInSentenceVect, 0.0f); 45 Arrays.fill(weightInSentenceVect, 0.0f);
46 if (_hiatus == ADAPTIVE_HIATUS) 46 if (_hiatus == ADAPTIVE_HIATUS)
47 _hiatusValue = ll.localHiatus(); 47 _hiatusValue = ll.localHiatus();
48 int previousSentenceIdx = -1; 48 int previousSentenceIdx = -1;
49 int sentenceIdx = 0; 49 int sentenceIdx = 0;
50 int chainLength = 1; 50 int chainLength = 1;
51 int lemmasInChainCount = 0; 51 int lemmasInChainCount = 0;
52 int lemmaSentenceCount = ll.sentenceCount(); 52 int lemmaSentenceCount = ll.sentenceCount();
53 53
54 for (int i=0; i<lemmaSentenceCount; i++) 54 for (int i=0; i<lemmaSentenceCount; i++)
55 { 55 {
56 sentenceIdx = ll.sentenceIdx(i); 56 sentenceIdx = ll.sentenceIdx(i);
57 presenceInSentenceVect[sentenceIdx] = true; 57 presenceInSentenceVect[sentenceIdx] = true;
58 if (_computeChains) 58 if (_computeChains)
59 { 59 {
60 if (previousSentenceIdx == -1) 60 if (previousSentenceIdx == -1)
61 previousSentenceIdx = sentenceIdx; 61 previousSentenceIdx = sentenceIdx;
62 if (_hiatus == NO_HIATUS || 62 if (_hiatus == NO_HIATUS ||
63 sentenceIdx-previousSentenceIdx <= _hiatusValue) 63 sentenceIdx-previousSentenceIdx <= _hiatusValue)
64 { 64 {
65 chainLength += sentenceIdx-previousSentenceIdx; 65 chainLength += sentenceIdx-previousSentenceIdx;
66 lemmasInChainCount++; 66 lemmasInChainCount++;
67 } 67 }
68 else 68 else
69 { 69 {
70 setWeight(previousSentenceIdx, chainLength, lemmasInChainCount); 70 setWeight(previousSentenceIdx, chainLength, lemmasInChainCount);
71 chainLength = 1; 71 chainLength = 1;
72 lemmasInChainCount = 1; 72 lemmasInChainCount = 1;
73 } 73 }
74 previousSentenceIdx = sentenceIdx; 74 previousSentenceIdx = sentenceIdx;
75 } 75 }
76 } 76 }
77 if (_computeChains) 77 if (_computeChains)
78 setWeight(previousSentenceIdx, chainLength, lemmasInChainCount); 78 setWeight(previousSentenceIdx, chainLength, lemmasInChainCount);
79 } 79 }
80 //------------------------------------------------------------------------ 80 //------------------------------------------------------------------------
81 /** 81 /**
82 * Cette fonction permet de pondŽrer un lien lexical en fonction de la densitŽ des occurrences 82 * Cette fonction permet de pondérer un lien lexical en fonction de la densité des occurrences
83 * du lemme, et du poids du lemme. 83 * du lemme, et du poids du lemme.
84 * @param lastSentenceIdx : numŽro de la phrase dans laquelle apparait la dernire occurrence 84 * @param lastSentenceIdx : numéro de la phrase dans laquelle apparait la dernière occurrence
85 * @param chainLength : longueur totale du lien lexical 85 * @param chainLength : longueur totale du lien lexical
86 * @param lemmasInChainCount : nombre d'occurrences du lemme dans le llien lexical 86 * @param lemmasInChainCount : nombre d'occurrences du lemme dans le llien lexical
87 */ 87 */
88 void setWeight(int lastSentenceIdx, int chainLength, int lemmasInChainCount) 88 void setWeight(int lastSentenceIdx, int chainLength, int lemmasInChainCount)
89 { 89 {
90 if (chainLength > 1) 90 if (chainLength > 1)
91 { 91 {
92 float w = 1.0f; 92 float w = 1.0f;
93 if (_useWeight) 93 if (_useWeight)
94 w = _ll.maxWeight * lemmasInChainCount 94 w = _ll.maxWeight * lemmasInChainCount
95 * (float)Math.log((float)sentenceCount/(float)chainLength); 95 * (float)Math.log((float)sentenceCount/(float)chainLength);
96 for (int j=0; j<chainLength; j++) 96 for (int j=0; j<chainLength; j++)
97 weightInSentenceVect[lastSentenceIdx-j] = w; 97 weightInSentenceVect[lastSentenceIdx-j] = w;
98 } 98 }
99 } 99 }
100 } 100 }
101 //-------------------------------------------------------------------------- 101 //--------------------------------------------------------------------------
102 public DefaultLexicalChainList(DefaultInputData in) 102 public DefaultLexicalChainList(DefaultInputData in)
103 { 103 {
104 input = in; 104 input = in;
105 dict = in.lemmaDict; 105 dict = in.lemmaDict;
106 config = in.config; 106 config = in.config;
107 String s = config.getParam("computeChains"); 107 String s = config.getParam("computeChains");
108 _useWeight = (s.equals("weight")); 108 _useWeight = (s.equals("weight"));
109 _computeChains = (s.equals("yes") || s.equals("weight")); 109 _computeChains = (s.equals("yes") || s.equals("weight"));
110 String chains = config.getParam("lexicalChainsHiatus"); 110 String chains = config.getParam("lexicalChainsHiatus");
111 if (chains.equals("")) 111 if (chains.equals(""))
112 _hiatus = NO_HIATUS; 112 _hiatus = NO_HIATUS;
113 else if (chains.equals("ADAPTIVE")) 113 else if (chains.equals("ADAPTIVE"))
114 _hiatus = ADAPTIVE_HIATUS; 114 _hiatus = ADAPTIVE_HIATUS;
115 else 115 else
116 { 116 {
117 _hiatus = FIXED_HIATUS; 117 _hiatus = FIXED_HIATUS;
118 _hiatusValue = Integer.parseInt(chains); 118 _hiatusValue = Integer.parseInt(chains);
119 } 119 }
120 sentenceCount = input.sentenceCount(); 120 sentenceCount = input.sentenceCount();
121 121
122 for (int i=0; i<dict.lemmaCount(); i++) 122 for (int i=0; i<dict.lemmaCount(); i++)
123 { 123 {
124 LemmaDict.Lemma ll = dict.lemmaObject(i); 124 LemmaDict.Lemma ll = dict.lemmaObject(i);
125 // si le lemme est unique dans l'ensemble des phrases, on ne le garde pas 125 // si le lemme est unique dans l'ensemble des phrases, on ne le garde pas
126 if (_computeChains && ll.occurences < 2) 126 if (_computeChains && ll.occurences < 2)
127 continue; 127 continue;
128 Lemma lemma = new Lemma(ll); 128 Lemma lemma = new Lemma(ll);
129 if (true) // test à quelles conditions on ajoute le lemme 129 if (true) // test ‡ quelles conditions on ajoute le lemme
130 _lemmaList.add(lemma); 130 _lemmaList.add(lemma);
131 } 131 }
132 } 132 }
133 //-------------------------------------------------------------------------- 133 //--------------------------------------------------------------------------
134 /** 134 /**
135 * Cette fonction renvoie le code d'un lemme ayant un index donnŽ 135 * Cette fonction renvoie le code d'un lemme ayant un index donné
136 * @param lemmaIdx : index du lemme 136 * @param lemmaIdx : index du lemme
137 * @return : le code du lemme 137 * @return : le code du lemme
138 */ 138 */
139 public int lemmaCode(int lemmaIdx) 139 public int lemmaCode(int lemmaIdx)
140 { 140 {
141 return _lemmaList.get(lemmaIdx)._ll.code; 141 return _lemmaList.get(lemmaIdx)._ll.code;
142 } 142 }
143 //-------------------------------------------------------------------------- 143 //--------------------------------------------------------------------------
144 /** 144 /**
145 * Cette fonction renvoie le nombre total de lemmes ayant un lien lexical 145 * Cette fonction renvoie le nombre total de lemmes ayant un lien lexical
146 * @return : un nombre de lemmes 146 * @return : un nombre de lemmes
147 */ 147 */
148 public int lemmaCount() 148 public int lemmaCount()
149 { 149 {
150 return _lemmaList.size(); 150 return _lemmaList.size();
151 } 151 }
152 //-------------------------------------------------------------------------- 152 //--------------------------------------------------------------------------
153 /** 153 /**
154 * Cette fonction indique si un lemme donnŽ est prŽsent dans le texte initial dans une phrase donnŽe 154 * Cette fonction indique si un lemme donné est présent dans le texte initial dans une phrase donnée
155 * @param lemmaIdx : index du lemme ˆ tester 155 * @param lemmaIdx : index du lemme à tester
156 * @param sentenceIdx : numŽro de la phrase 156 * @param sentenceIdx : numéro de la phrase
157 * @return true si le lemme est prŽsent dans la phrase 157 * @return true si le lemme est présent dans la phrase
158 * false sinon 158 * false sinon
159 * 159 *
160 */ 160 */
161 public boolean presence(int lemmaIdx, int sentenceIdx) 161 public boolean presence(int lemmaIdx, int sentenceIdx)
162 { 162 {
163 return _lemmaList.get(lemmaIdx).presenceInSentenceVect[sentenceIdx]; 163 return _lemmaList.get(lemmaIdx).presenceInSentenceVect[sentenceIdx];
164 } 164 }
165 //-------------------------------------------------------------------------- 165 //--------------------------------------------------------------------------
166 /** 166 /**
167 * Cette fonction permet d'accŽder au poids du lien lexical d'un lemme dans une phrase 167 * Cette fonction permet d'accéder au poids du lien lexical d'un lemme dans une phrase
168 * @param lemmaIdx : index du lemme 168 * @param lemmaIdx : index du lemme
169 * @param sentenceIdx : numŽro de la phrase 169 * @param sentenceIdx : numéro de la phrase
170 * @return : valeur du lien lexical du lemme dans la phrase si il y a un lien actif, 0 sinon 170 * @return : valeur du lien lexical du lemme dans la phrase si il y a un lien actif, 0 sinon
171 */ 171 */
172 public float weight(int lemmaIdx, int sentenceIdx) 172 public float weight(int lemmaIdx, int sentenceIdx)
173 { 173 {
174 return _lemmaList.get(lemmaIdx).weightInSentenceVect[sentenceIdx]; 174 return _lemmaList.get(lemmaIdx).weightInSentenceVect[sentenceIdx];
175 } 175 }
176 //-------------------------------------------------------------------------- 176 //--------------------------------------------------------------------------
177 /** 177 /**
178 * Cette fonction permet d'appeller toString (false, false), une version par dŽfaut de l'affichage. 178 * Cette fonction permet d'appeller toString (false, false), une version par défaut de l'affichage.
179 */ 179 */
180 public String toString() 180 public String toString()
181 { 181 {
182 return toString(false, false); 182 return toString(false, false);
183 } 183 }
184 //-------------------------------------------------------------------------- 184 //--------------------------------------------------------------------------
185 /** 185 /**
186 * Cette fonction permet de tester et d'afficher les liens lexicaux calculŽs 186 * Cette fonction permet de tester et d'afficher les liens lexicaux calculés
187 * @param displayWeightZero : true pour affichier les poids mme quand les liens sont absents 187 * @param displayWeightZero : true pour affichier les poids même quand les liens sont absents
188 * @param displaySentenceContent : truc pour afficher le texte initial 188 * @param displaySentenceContent : truc pour afficher le texte initial
189 * 189 *
190 */ 190 */
191 public String toString(boolean displayWeightZero, 191 public String toString(boolean displayWeightZero,
192 boolean displaySentenceContent) 192 boolean displaySentenceContent)
193 { 193 {
194 java.io.StringWriter w = new java.io.StringWriter(); 194 java.io.StringWriter w = new java.io.StringWriter();
195 w.write(super.toString()+"\n"); 195 w.write(super.toString()+"\n");
196 for (int i=0; i<_lemmaList.size(); i++) 196 for (int i=0; i<_lemmaList.size(); i++)
197 { 197 {
198 w.write("LEMMA #"+i 198 w.write("LEMMA #"+i
199 +" code("+lemmaCode(i)+")" 199 +" code("+lemmaCode(i)+")"
200 +" content("+dict.lemmaObject(lemmaCode(i)).content+")" 200 +" content("+dict.lemmaObject(lemmaCode(i)).content+")"
201 +"\n"); 201 +"\n");
202 for (int sent=0; sent<sentenceCount; sent++) 202 for (int sent=0; sent<sentenceCount; sent++)
203 if (weight(i, sent) != 0.0f || displayWeightZero) 203 if (weight(i, sent) != 0.0f || displayWeightZero)
204 { 204 {
205 w.write(" SENTENCE #"+sent 205 w.write(" SENTENCE #"+sent
206 +" presence("+presence(i,sent)+")" 206 +" presence("+presence(i,sent)+")"
207 +" weight("+weight(i, sent)+")"); 207 +" weight("+weight(i, sent)+")");
208 if (displaySentenceContent) 208 if (displaySentenceContent)
209 w.write(" content("+input.sentence(sent).content+")"); 209 w.write(" content("+input.sentence(sent).content+")");
210 w.write("\n"); 210 w.write("\n");
211 } 211 }
212 } 212 }
213 return w.toString(); 213 return w.toString();
214 } 214 }
215 } 215 }
216 216
tools/SIGMUND/LIA_topic_seg/src/LIA_topic_seg/GapsScores.java
1 package LIA_topic_seg; 1 package LIA_topic_seg;
2 /** 2 /**
3 * Cette interface est dŽdiŽe au calcul de probabilitŽ de ruptures entre phrases ou sŽquences de mots. 3 * Cette interface est dédiée au calcul de probabilité de ruptures entre phrases ou séquences de mots.
4 * elle se fonde sur le rŽsultat de LexicalChainList, qui fournit les lemmes importants de chaque phrase, 4 * elle se fonde sur le résultat de LexicalChainList, qui fournit les lemmes importants de chaque phrase,
5 * qu'ils constituent un lien lexical ou qu'ils soient juste prŽsents. 5 * qu'ils constituent un lien lexical ou qu'ils soient juste présents.
6 * 6 *
7 * 7 *
8 */ 8 */
9 public interface GapsScores { 9 public interface GapsScores {
10 /** 10 /**
11 * La fonction renvoie un tableau des valeurs calculŽes pour tous les intervalles entre 2 unitŽs de traitement 11 * La fonction renvoie un tableau des valeurs calculées pour tous les intervalles entre 2 unités de traitement
12 * Il peut s'agir de valeurs ˆ maximiser ou ˆ minimiser. 12 * Il peut s'agir de valeurs à maximiser ou à minimiser.
13 * @return un tableau de valeurs 13 * @return un tableau de valeurs
14 */ 14 */
15 public float[] values(); 15 public float[] values();
16 /** 16 /**
17 * retourne le score de l'intervalle entre la phrase bound et la phrase bound+1 17 * retourne le score de l'intervalle entre la phrase bound et la phrase bound+1
18 * @param bound : numŽro de la phrase prŽcŽdent l'intervalle 18 * @param bound : numéro de la phrase précédent l'intervalle
19 * @return : un score 19 * @return : un score
20 */ 20 */
21 public float bound_value(int bound); 21 public float bound_value(int bound);
22 /** 22 /**
23 * propose une sortie texte des valeurs calculŽes. le format est pour chaque intervalle une ligne : 23 * propose une sortie texte des valeurs calculées. le format est pour chaque intervalle une ligne :
24 * GAP X-X+1 : valeur 24 * GAP X-X+1 : valeur
25 * @return : une chaine de caractres 25 * @return : une chaine de caractères
26 */ 26 */
27 public String to_string(); 27 public String to_string();
28 28
29 } 29 }
30 30
tools/SIGMUND/LIA_topic_seg/src/LIA_topic_seg/LemmaDict.java
1 package LIA_topic_seg; 1 package LIA_topic_seg;
2 2
3 import java.util.*; 3 import java.util.*;
4 4
5 /** 5 /**
6 * Cette classe reprŽsente le contenu d'un dictionnaire de lemmes, chaque lemme Žtant dŽfini par un 6 * Cette classe représente le contenu d'un dictionnaire de lemmes, chaque lemme étant défini par un
7 * code (numŽro d'index), son contenu textuel, le poids maximal qui lui est attribuŽ dans le texte, 7 * code (numéro d'index), son contenu textuel, le poids maximal qui lui est attribué dans le texte,
8 * le nombre de fois o il apparait dans le texte, et la liste des phrases dans lesquelles il apparait. 8 * le nombre de fois où il apparait dans le texte, et la liste des phrases dans lesquelles il apparait.
9 * 9 *
10 */ 10 */
11 class LemmaDict 11 class LemmaDict
12 { 12 {
13 //-------------------------------------------------------------------------- 13 //--------------------------------------------------------------------------
14 class Lemma 14 class Lemma
15 { 15 {
16 int code; 16 int code;
17 String content; 17 String content;
18 float maxWeight; 18 float maxWeight;
19 int occurences = 1; 19 int occurences = 1;
20 private ArrayList<Integer> sentenceIdxList = new ArrayList<Integer>(); 20 private ArrayList<Integer> sentenceIdxList = new ArrayList<Integer>();
21 21
22 private Lemma(int c, float w, String s, int i) 22 private Lemma(int c, float w, String s, int i)
23 { 23 {
24 code = c; 24 code = c;
25 maxWeight = w; 25 maxWeight = w;
26 content = s; 26 content = s;
27 sentenceIdxList.add(i); 27 sentenceIdxList.add(i);
28 } 28 }
29 int sentenceCount() 29 int sentenceCount()
30 { 30 {
31 return sentenceIdxList.size(); 31 return sentenceIdxList.size();
32 } 32 }
33 int sentenceIdx(int i) 33 int sentenceIdx(int i)
34 { 34 {
35 return sentenceIdxList.get(i); 35 return sentenceIdxList.get(i);
36 } 36 }
37 int localHiatus() 37 int localHiatus()
38 { 38 {
39 int size = sentenceIdxList.size(); 39 int size = sentenceIdxList.size();
40 return (sentenceIdxList.get(size-1) - sentenceIdxList.get(0)) / size + 1; 40 return (sentenceIdxList.get(size-1) - sentenceIdxList.get(0)) / size + 1;
41 } 41 }
42 } 42 }
43 private ArrayList<Lemma> _array = new ArrayList<Lemma>(); 43 private ArrayList<Lemma> _array = new ArrayList<Lemma>();
44 private Hashtable<String, Integer> _table = new Hashtable<String,Integer>(); 44 private Hashtable<String, Integer> _table = new Hashtable<String,Integer>();
45 //-------------------------------------------------------------------------- 45 //--------------------------------------------------------------------------
46 int lemmaCode(String content) 46 int lemmaCode(String content)
47 { 47 {
48 return _table.get(content); 48 return _table.get(content);
49 } 49 }
50 //-------------------------------------------------------------------------- 50 //--------------------------------------------------------------------------
51 Lemma lemmaObject(int lemmaCode) 51 Lemma lemmaObject(int lemmaCode)
52 { 52 {
53 return _array.get(lemmaCode); 53 return _array.get(lemmaCode);
54 } 54 }
55 //-------------------------------------------------------------------------- 55 //--------------------------------------------------------------------------
56 int lemmaCount() 56 int lemmaCount()
57 { 57 {
58 return _array.size(); 58 return _array.size();
59 } 59 }
60 //-------------------------------------------------------------------------- 60 //--------------------------------------------------------------------------
61 int add(String content, float weight, int sentenceIdx) 61 int add(String content, float weight, int sentenceIdx)
62 { 62 {
63 Lemma l; 63 Lemma l;
64 Integer i = _table.get(content); 64 Integer i = _table.get(content);
65 if (i == null) 65 if (i == null)
66 { 66 {
67 int code = _array.size(); 67 int code = _array.size();
68 String s = new String(content); 68 String s = new String(content);
69 _table.put(s, code); 69 _table.put(s, code);
70 _array.add(new Lemma(code, weight, s, sentenceIdx)); 70 _array.add(new Lemma(code, weight, s, sentenceIdx));
71 return code; 71 return code;
72 } 72 }
73 l = _array.get(i); 73 l = _array.get(i);
74 l.maxWeight = Math.max(weight, l.maxWeight); 74 l.maxWeight = Math.max(weight, l.maxWeight);
75 l.occurences++; 75 l.occurences++;
76 l.sentenceIdxList.add(sentenceIdx); 76 l.sentenceIdxList.add(sentenceIdx);
77 return i; 77 return i;
78 } 78 }
79 //-------------------------------------------------------------------------- 79 //--------------------------------------------------------------------------
80 public String toString() 80 public String toString()
81 { 81 {
82 java.io.StringWriter w = new java.io.StringWriter(); 82 java.io.StringWriter w = new java.io.StringWriter();
83 w.write(super.toString()+"\n"); 83 w.write(super.toString()+"\n");
84 for (int i=0; i<lemmaCount(); i++) 84 for (int i=0; i<lemmaCount(); i++)
85 { 85 {
86 Lemma l = lemmaObject(i); 86 Lemma l = lemmaObject(i);
87 w.write("LEMMA" 87 w.write("LEMMA"
88 +" code("+l.code /*= i*/+")" 88 +" code("+l.code /*= i*/+")"
89 +" content("+l.content+")" 89 +" content("+l.content+")"
90 +" maxWeight("+l.maxWeight+")" 90 +" maxWeight("+l.maxWeight+")"
91 +" occurences("+l.occurences+")" 91 +" occurences("+l.occurences+")"
92 +" localHiatus("+l.localHiatus()+")" 92 +" localHiatus("+l.localHiatus()+")"
93 +" sentences#("); 93 +" sentences#(");
94 for (int j=0; j<l.sentenceCount(); j++) 94 for (int j=0; j<l.sentenceCount(); j++)
95 { 95 {
96 if (j!=0) 96 if (j!=0)
97 w.write(","); 97 w.write(",");
98 w.write(""+l.sentenceIdx(j)); // "" mandatory to avoid bug 98 w.write(""+l.sentenceIdx(j)); // "" mandatory to avoid bug
99 } 99 }
100 w.write(")\n"); 100 w.write(")\n");
101 } 101 }
102 return w.toString(); 102 return w.toString();
103 } 103 }
104 //-------------------------------------------------------------------------- 104 //--------------------------------------------------------------------------
105 } 105 }
tools/SIGMUND/LIA_topic_seg/src/LIA_topic_seg/LexicalChainList.java
1 package LIA_topic_seg; 1 package LIA_topic_seg;
2 2
3 /** 3 /**
4 * Cette classe gre le calcul des liens lexicaux, et plus gŽnŽralement de la reprŽsentation du texte, 4 * Cette classe gère le calcul des liens lexicaux, et plus généralement de la représentation du texte,
5 * en se basant sur des valeurs associŽes ˆ chaque lemme du dictionnaire des lemmes sur l'ensemble des phrases 5 * en se basant sur des valeurs associées à chaque lemme du dictionnaire des lemmes sur l'ensemble des phrases
6 * du texte analysŽ. Un lemme peut tre reprŽsentŽ par n'importe quelle cha”ne de caractres. 6 * du texte analysé. Un lemme peut être représenté par n'importe quelle chaîne de caractères.
7 * 7 *
8 */ 8 */
9 public interface LexicalChainList { 9 public interface LexicalChainList {
10 /** 10 /**
11 * 11 *
12 * @param lemmaIdx : numŽro d'index du lemme 12 * @param lemmaIdx : numéro d'index du lemme
13 * @return le code du lemme 13 * @return le code du lemme
14 */ 14 */
15 int lemmaCode(int lemmaIdx); 15 int lemmaCode(int lemmaIdx);
16 16
17 /** 17 /**
18 * 18 *
19 * @return le nombre de lemmes recensŽs dans la reprŽsentation du texte. 19 * @return le nombre de lemmes recensés dans la représentation du texte.
20 */ 20 */
21 int lemmaCount(); 21 int lemmaCount();
22 22
23 /** 23 /**
24 * 24 *
25 * @param lemmaIdx : numŽro d'index du lemme 25 * @param lemmaIdx : numéro d'index du lemme
26 * @param sentenceIdx : numŽro de la phrase (ou unitŽ de traitement) 26 * @param sentenceIdx : numéro de la phrase (ou unité de traitement)
27 * @return : true si le lemme ou est reprŽsentŽ dans la phrase. 27 * @return : true si le lemme ou est représenté dans la phrase.
28 */ 28 */
29 boolean presence(int lemmaIdx, int sentenceIdx); 29 boolean presence(int lemmaIdx, int sentenceIdx);
30 30
31 /** 31 /**
32 * 32 *
33 * @param lemmaIdx : numŽro d'index du lemme 33 * @param lemmaIdx : numéro d'index du lemme
34 * @param sentenceIdx : numŽro de la phrase (ou unitŽ de traitement) 34 * @param sentenceIdx : numéro de la phrase (ou unité de traitement)
35 * @return : le poids du lemme dans la phrase, qui peut tre par exemple un nombre d'occurrences ou le poids d'un llien lexical, ou encore un score d'affinitŽs lexicales. 35 * @return : le poids du lemme dans la phrase, qui peut être par exemple un nombre d'occurrences ou le poids d'un llien lexical, ou encore un score d'affinités lexicales.
36 */ 36 */
37 float weight(int lemmaIdx, int sentenceIdx); 37 float weight(int lemmaIdx, int sentenceIdx);
38 38
39 /** 39 /**
40 * Cette fonction doit permettre un affichage ˆ l'Žcran ou une sortie fichier pour pouvoir suivre le fonctionnement du programme 40 * Cette fonction doit permettre un affichage à l'écran ou une sortie fichier pour pouvoir suivre le fonctionnement du programme
41 * @return : une cha”ne de caractres contenant par exemple pour chaque phrase les lemmes qui lui sont affectŽs, ou l'inverse... 41 * @return : une chaîne de caractères contenant par exemple pour chaque phrase les lemmes qui lui sont affectés, ou l'inverse...
42 */ 42 */
43 public String toString(); 43 public String toString();
44 44
45 } 45 }
46 46
tools/SIGMUND/LIA_topic_seg/src/LIA_topic_seg/Sentence.java
1 package LIA_topic_seg; 1 package LIA_topic_seg;
2 2
3 import java.util.*; 3 import java.util.*;
4 4
5 /** 5 /**
6 * Cette classe reprŽsente les informations contenues dans une phrase, c'est ˆ dire un texte brut 6 * Cette classe représente les informations contenues dans une phrase, c'est à dire un texte brut
7 * et un ensemble de lemmes pondŽrŽs. 7 * et un ensemble de lemmes pondérés.
8 */ 8 */
9 class Sentence 9 class Sentence
10 { 10 {
11 //-------------------------------------------------------------------------- 11 //--------------------------------------------------------------------------
12 /** 12 /**
13 * Cette classe permet de conserver les informations sur un lemme, c'est ˆ dire son rang d'accs 13 * Cette classe permet de conserver les informations sur un lemme, c'est à dire son rang d'accès
14 * dans le dictionnaire des lemmes, et le poids qui lui est attribuŽ dans le fichier d'entrŽe. 14 * dans le dictionnaire des lemmes, et le poids qui lui est attribué dans le fichier d'entrée.
15 */ 15 */
16 class Lemma 16 class Lemma
17 { 17 {
18 int code; 18 int code;
19 float weight; 19 float weight;
20 20
21 Lemma(int c, float w) 21 Lemma(int c, float w)
22 { 22 {
23 code = c; 23 code = c;
24 weight = w; 24 weight = w;
25 } 25 }
26 } 26 }
27 //-------------------------------------------------------------------------- 27 //--------------------------------------------------------------------------
28 String content; 28 String content;
29 private ArrayList<Lemma> _lemmaList = new ArrayList<Lemma>(); 29 private ArrayList<Lemma> _lemmaList = new ArrayList<Lemma>();
30 //private Hashtable<Integer, Integer> _dict 30 //private Hashtable<Integer, Integer> _dict
31 // = new Hashtable<Integer, Integer>(); // code + occurences 31 // = new Hashtable<Integer, Integer>(); // code + occurences
32 private int _wordCount; 32 private int _wordCount;
33 private boolean _wordCountDefined = false; 33 private boolean _wordCountDefined = false;
34 //-------------------------------------------------------------------------- 34 //--------------------------------------------------------------------------
35 35
36 /** 36 /**
37 * Cette fonction permet de signaler la prŽsence d'un lemme dans une phrase 37 * Cette fonction permet de signaler la présence d'un lemme dans une phrase
38 * @param code : le code issu du dictionnaire des lemmes 38 * @param code : le code issu du dictionnaire des lemmes
39 * @param weight : le poids attribuŽ au lemme dans la phrase 39 * @param weight : le poids attribué au lemme dans la phrase
40 */ void addLemma(int code, float weight) 40 */ void addLemma(int code, float weight)
41 { 41 {
42 //int occurences = 1; 42 //int occurences = 1;
43 //Integer xocc = _dict.get(code); 43 //Integer xocc = _dict.get(code);
44 //if (xocc != null) 44 //if (xocc != null)
45 // occurences = xocc.intValue()+1; 45 // occurences = xocc.intValue()+1;
46 //_dict.put(code, occurences); 46 //_dict.put(code, occurences);
47 _lemmaList.add(new Lemma(code, weight)); 47 _lemmaList.add(new Lemma(code, weight));
48 } 48 }
49 //-------------------------------------------------------------------------- 49 //--------------------------------------------------------------------------
50 /** 50 /**
51 * Cette fonction permet de calculer de manire basique le nombre de mots du texte brut de la phrase 51 * Cette fonction permet de calculer de manière basique le nombre de mots du texte brut de la phrase
52 * les sŽparateurs de mots utilisŽs sont les caractres d'espacement. 52 * les séparateurs de mots utilisés sont les caractères d'espacement.
53 * @return : retourne le nombre de mots de la phrase 53 * @return : retourne le nombre de mots de la phrase
54 */ 54 */
55 int wordCount() 55 int wordCount()
56 { 56 {
57 if (!_wordCountDefined) 57 if (!_wordCountDefined)
58 { 58 {
59 _wordCount = new StringTokenizer(content, " '\t\n\r\f").countTokens(); 59 _wordCount = new StringTokenizer(content, " '\t\n\r\f").countTokens();
60 _wordCountDefined = true; 60 _wordCountDefined = true;
61 } 61 }
62 return _wordCount; 62 return _wordCount;
63 } 63 }
64 //-------------------------------------------------------------------------- 64 //--------------------------------------------------------------------------
65 /** 65 /**
66 * Cette fonction renvoie le nombre de lemmes associŽs ˆ la phrase 66 * Cette fonction renvoie le nombre de lemmes associés à la phrase
67 * @return le nombre de lemmes 67 * @return le nombre de lemmes
68 */ 68 */
69 int lemmaCount() 69 int lemmaCount()
70 { 70 {
71 return _lemmaList.size(); 71 return _lemmaList.size();
72 } 72 }
73 //-------------------------------------------------------------------------- 73 //--------------------------------------------------------------------------
74 /** 74 /**
75 *Cette fonction permet d'accŽder ˆ un lemme de la phrase en fonction de son rang dans la phrase 75 *Cette fonction permet d'accéder à un lemme de la phrase en fonction de son rang dans la phrase
76 *@return un objet de type Lemma (dŽfini par un code dans le dictionnaire des lemmes et un poids) 76 *@return un objet de type Lemma (défini par un code dans le dictionnaire des lemmes et un poids)
77 */ 77 */
78 78
79 Lemma lemmaObject(int lemmaIdx) 79 Lemma lemmaObject(int lemmaIdx)
80 { 80 {
81 return _lemmaList.get(lemmaIdx); 81 return _lemmaList.get(lemmaIdx);
82 } 82 }
83 //-------------------------------------------------------------------------- 83 //--------------------------------------------------------------------------
84 //int lemmaOccurences(int lemmaCode) 84 //int lemmaOccurences(int lemmaCode)
85 //{ 85 //{
86 // return _dict.get(lemmaCode); 86 // return _dict.get(lemmaCode);
87 //} 87 //}
88 //-------------------------------------------------------------------------- 88 //--------------------------------------------------------------------------
89 } 89 }
90 90
tools/SIGMUND/LIA_topic_seg/src/Test.java
1 1
2 import LIA_topic_seg.*; 2 import LIA_topic_seg.*;
3 import java.io.*; 3 import java.io.*;
4 import java.util.*; 4 import java.util.*;
5 5
6 /** 6 /**
7 * Cet exemple recense la plupart des possibilitŽs pour une utilisation minimale de l'application 7 * Cet exemple recense la plupart des possibilités pour une utilisation minimale de l'application
8 * l'exŽcution directe applique les paramtres par dŽfaut. 8 * l'exécution directe applique les paramètres par défaut.
9 * 9 *
10 */ 10 */
11 class Test 11 class Test
12 { 12 {
13 public static void main(String args[]) 13 public static void main(String args[])
14 { 14 {
15 try 15 try
16 { 16 {
17 //crŽation d'une configuration avec les paramtres par dŽfaut 17 //création d'une configuration avec les paramètres par défaut
18 DefaultConfig c = new DefaultConfig(); 18 DefaultConfig c = new DefaultConfig();
19 19
20 // lorsque on veut utiliser un fichier de configuration connu ˆ l'avance 20 // lorsque on veut utiliser un fichier de configuration connu à l'avance
21 //c.load("config3.xml"); 21 //c.load("config3.xml");
22 22
23 //on peut rŽcupŽrer Žgalement les paramtres en ligne de commande 23 //on peut récupérer également les paramètres en ligne de commande
24 //en cas de conflit avec le fichier de configuration, c'est la ligne de commande qui est prioritaire 24 //en cas de conflit avec le fichier de configuration, c'est la ligne de commande qui est prioritaire
25 //c.setParamsFromCmdLine(args); // on peut ajouter des paramtres en ligne de commande Žgalement (nom du fichier, nombre de frontires ˆ calculer, ...) 25 //c.setParamsFromCmdLine(args); // on peut ajouter des paramètres en ligne de commande également (nom du fichier, nombre de frontières à calculer, ...)
26 26
27 //c.save("config.xml"); 27 //c.save("config.xml");
28 28
29 /* pour passer un fichier de configuration en paramtre 29 /* pour passer un fichier de configuration en paramètre
30 DefaultConfig cc = new DefaultConfig(); 30 DefaultConfig cc = new DefaultConfig();
31 cc.setParamsFromCmdLine(args); 31 cc.setParamsFromCmdLine(args);
32 DefaultConfig c = new DefaultConfig(); 32 DefaultConfig c = new DefaultConfig();
33 if (cc.getParam("config") != null) 33 if (cc.getParam("config") != null)
34 c.load(cc.getParam("config")); 34 c.load(cc.getParam("config"));
35 c.setParamsFromCmdLine(args); 35 c.setParamsFromCmdLine(args);
36 c.save("config3.xml"); 36 c.save("config3.xml");
37 */ 37 */
38 System.out.println(c.toString()); 38 System.out.println(c.toString());
39 39
40 //-------------------------------------------------------------------------- 40 //--------------------------------------------------------------------------
41 //InputData input = new InputData(c, c.getParam("file")); 41 //InputData input = new InputData(c, c.getParam("file"));
42 DefaultInputData input = new DefaultInputData(c, "0.xml"); 42 //DefaultInputData input = new DefaultInputData(c, "0.xml");
43 DefaultInputData input = new DefaultInputData(c, args[0]);
43 44
44 //-------------------------------------------------------------------------- 45 //--------------------------------------------------------------------------
45 DefaultLexicalChainList chains = new DefaultLexicalChainList(input); 46 DefaultLexicalChainList chains = new DefaultLexicalChainList(input);
46 47
47 /* impression de la trace du calcul des liens lexicaux 48 /* impression de la trace du calcul des liens lexicaux
48 System.out.println("Liste des phrases"); 49 System.out.println("Liste des phrases");
49 System.out.println("================="); 50 System.out.println("=================");
50 System.out.println(input.toString()); 51 System.out.println(input.toString());
51 52
52 System.out.println("\nDictionnaire des lemmes"); 53 System.out.println("\nDictionnaire des lemmes");
53 System.out.println("======================="); 54 System.out.println("=======================");
54 System.out.println(input.lemmaDict.toString()); 55 System.out.println(input.lemmaDict.toString());
55 56
56 System.out.println("\nChaines lexicales"); 57 System.out.println("\nChaines lexicales");
57 System.out.println("================="); 58 System.out.println("=================");
58 System.out.println(chains.toString(false, false)); 59 System.out.println(chains.toString(false, false));
59 */ 60 */
60 //-------------------------------------------------------------------------- 61 //--------------------------------------------------------------------------
61 62
62 DefaultGapsScores scores = new DefaultGapsScores(chains, input.sentenceCount()); 63 DefaultGapsScores scores = new DefaultGapsScores(chains, input.sentenceCount());
63 64
64 // choix du calcul des valeurs affectŽes aux intervalles 65 // choix du calcul des valeurs affectées aux intervalles
65 // fonction automatiquement lancŽe ˆ l'initialisation : scores.compute_cos(); //similaritŽs cosine 66 // fonction automatiquement lancée à l'initialisation : scores.compute_cos(); //similarités cosine
66 System.out.println(scores.to_string()); 67 System.out.println(scores.to_string());
67 68
68 //les autres fonctions de calcul des scores sont facultatives, et peuvent tre lancŽes successivement. 69 //les autres fonctions de calcul des scores sont facultatives, et peuvent être lancées successivement.
69 scores.compute_smoothing(1); //lissage du calcul des similaritŽs 70 scores.compute_smoothing(1); //lissage du calcul des similarités
70 System.out.println(scores.to_string()); 71 System.out.println(scores.to_string());
71 //scores.compute_depth_scores(); //calcul des scores de profondeur de similaritŽ, peut s'utiliser avec ou sans lissage 72 //scores.compute_depth_scores(); //calcul des scores de profondeur de similarité, peut s'utiliser avec ou sans lissage
72 //System.out.println(scores.to_string()); 73 //System.out.println(scores.to_string());
73 74
74 75
75 //-------------------------------------------------------------------------- 76 //--------------------------------------------------------------------------
76 DefaultBoundaries bound = new DefaultBoundaries(scores, 9); 77 DefaultBoundaries bound = new DefaultBoundaries(scores, 9);
77 // DefaultBoundaries bound = new DefaultBoundaries(scores, c.getParam("n"); 78 // DefaultBoundaries bound = new DefaultBoundaries(scores, c.getParam("n");
78 79
79 // choix du systme de calcul des frontires, en fonction du calcul choisi prŽcŽdemment 80 // choix du système de calcul des frontières, en fonction du calcul choisi précédemment
80 // il faut en choisir 1 parmi les 3 81 // il faut en choisir 1 parmi les 3
81 //bound.compute_min_similarities(); //ˆ utiliser aprs compute_cos et/ou compute_smoothing 82 //bound.compute_min_similarities(); //à utiliser après compute_cos et/ou compute_smoothing
82 bound.compute_loc_min(2); //ˆ utiliser aprs compute_cos et/ou compute_smoothing 83 bound.compute_loc_min(2); //à utiliser après compute_cos et/ou compute_smoothing
83 // bound.compute_max_depth(); //ˆ utiliser aprs compute_depth_scores 84 // bound.compute_max_depth(); //à utiliser après compute_depth_scores
84 85
85 86
86 //-------------------------------------------------------------------------- 87 //--------------------------------------------------------------------------
87 //impression du rŽsultat ˆ l'Žcran 88 //impression du résultat à l'écran
88 System.out.println(bound.to_string()); //numŽros de phrases aprs lesquelles il y a une frontire thŽmatique 89 System.out.println(bound.to_string()); //numéros de phrases après lesquelles il y a une frontière thématique
89 System.out.println(input.result_lines(bound)); // sortie pour les application d'Žvaluation 90 System.out.println(input.result_lines(bound)); // sortie pour les application d'évaluation
90 // System.out.println(input.result_complete(bound)); //sortie au mme format que l'entrŽe, avec les mmes informations 91 // System.out.println(input.result_complete(bound)); //sortie au même format que l'entrée, avec les mêmes informations
91 // System.out.println(input.result_text_only(bound)); //sortie au format xml, avec uniquement le texte dŽlimitŽ par des balises <seg> 92 // System.out.println(input.result_text_only(bound)); //sortie au format xml, avec uniquement le texte délimité par des balises <seg>
92 93
93 94
94 } 95 }
95 catch (Exception e) 96 catch (Exception e)
96 { 97 {
97 e.printStackTrace(); 98 e.printStackTrace();
98 } 99 }
99 } 100 }
100 } 101 }
101 102
tools/scripts/ProcessSOLRQueries.py
1 #!/usr/bin/python 1 #!/usr/bin/python
2 # -*- coding: utf-8 -*- 2 # -*- coding: utf-8 -*-
3 3
4 from urllib2 import * 4 from urllib2 import *
5 import json 5 import json
6 from pprint import pprint 6 from pprint import pprint
7 import sys 7 import sys
8 from solrinfo import * 8 from solrinfo import *
9 9
10 def obtainSOLRInfos(webName, query): 10 def obtainSOLRInfos(webName, query):
11 #print 'http://194.57.216.43:8080/' + webName + '/select?q='+ query + '&wt=json' 11 #print 'http://194.57.216.43:8080/' + webName + '/select?q='+ query + '&wt=json'
12 #conn = urlopen('http://194.57.216.43:8080/' + webName + '/select?q='+ query + '&wt=json') 12 #conn = urlopen('http://194.57.216.43:8080/' + webName + '/select?q='+ query + '&wt=json')
13 print 'http://'+machine+':'+port+'/' + webName + '/select?q='+ query + '&wt=json' 13 print 'http://'+machine+':'+port+'/' + webName + '/select?q='+ query + '&wt=json' + ' timeout = 30 '
14 conn = urlopen('http://'+machine+':'+port+'/' + webName + '/select?q='+ query + '&wt=json') 14 conn = urlopen('http://'+machine+':'+port+'/' + webName + '/select?q='+ query + '&wt=json', timeout = 30)
15 rsp = json.load(conn) 15 rsp = json.load(conn)
16 conn.close()
16 keywords = "" 17 keywords = ""
17 txts = "" 18 txts = ""
18 for doc in rsp['response']['docs']: 19 for doc in rsp['response']['docs']:
19 jsonDoc = json.loads(doc['jsonDocument'].encode("utf-8")) 20 jsonDoc = json.loads(doc['jsonDocument'].encode("utf-8"))
20 if 'extractedData' in jsonDoc: 21 if 'extractedData' in jsonDoc:
21 if 'entityTags' in jsonDoc['extractedData']: 22 if 'entityTags' in jsonDoc['extractedData']:
22 for keyword in jsonDoc['extractedData']['entityTags']: 23 for keyword in jsonDoc['extractedData']['entityTags']:
23 for item in jsonDoc['extractedData']['entityTags'][keyword]: 24 for item in jsonDoc['extractedData']['entityTags'][keyword]:
24 for access in item: 25 for access in item:
25 keywords += item[access]['value'].encode("utf-8") + "\n" 26 keywords += item[access]['value'].encode("utf-8") + "\n"
26 if 'content' in jsonDoc: 27 if 'content' in jsonDoc:
27 if 'body' in jsonDoc['content']: 28 if 'body' in jsonDoc['content']:
28 if 'textBlock' in jsonDoc['content']['body']['textBlocks']: 29 if 'textBlock' in jsonDoc['content']['body']['textBlocks']:
29 for txt in jsonDoc['content']['body']['textBlocks']['textBlock']: 30 for txt in jsonDoc['content']['body']['textBlocks']['textBlock']:
30 if 'parag' in txt: 31 if 'parag' in txt:
31 for parag in txt['parag']: 32 for parag in txt['parag']:
32 for textOrMedia in parag['textOrMultimediaRef']: 33 for textOrMedia in parag['textOrMultimediaRef']:
33 if 'text' in textOrMedia: 34 if 'text' in textOrMedia:
34 txts += textOrMedia['text']['value'].encode("utf-8") 35 txts += textOrMedia['text']['value'].encode("utf-8")
35 if 'text' in jsonDoc['content']: 36 if 'text' in jsonDoc['content']:
36 for txt in jsonDoc['content']['text']: 37 for txt in jsonDoc['content']['text']:
37 txts += txt['value'].encode("utf-8") 38 txts += txt['value'].encode("utf-8")
38 return keywords, txts 39 return keywords, txts
39 40
40 if len(sys.argv) != 4: 41 if len(sys.argv) != 4:
41 print "BAD USAGE: <(i) input queries> <(o) keywords out file> <(o) text out file>\n" 42 print "BAD USAGE: <(i) input queries> <(o) keywords out file> <(o) text out file>\n"
42 sys.exit(-1) 43 sys.exit(-1)
43 44
44 fileName = sys.argv[1] 45 fileName = sys.argv[1]
45 keywordsFile = sys.argv[2] 46 keywordsFile = sys.argv[2]
46 txtsFile = sys.argv[3] 47 txtsFile = sys.argv[3]
47 48
48 inFile = open(fileName, "r") 49 inFile = open(fileName, "r")
49 outKeywords = open(keywordsFile, "w") 50 outKeywords = open(keywordsFile, "w")
50 outTxts = open(txtsFile, "w") 51 outTxts = open(txtsFile, "w")
51 52
52 lines = inFile.readlines() 53 lines = inFile.readlines()
53 for query in lines: 54 for query in lines:
54 query = query.rstrip() 55 query = query.rstrip()
55 # print query 56 # print query
56 keywords, txt = obtainSOLRInfos('solr-otmedia-document', query) 57 keywords, txt = obtainSOLRInfos('solr-otmedia-document', query)
57 outKeywords.write(keywords) 58 outKeywords.write(keywords)
58 outTxts.write(txt) 59 outTxts.write(txt)
59 keywords, txt = obtainSOLRInfos('solr-otmedia-multimedia', query) 60 keywords, txt = obtainSOLRInfos('solr-otmedia-multimedia', query)
60 outKeywords.write(keywords) 61 outKeywords.write(keywords)
61 outTxts.write(txt) 62 outTxts.write(txt)
62 63
63 outKeywords.close() 64 outKeywords.close()
64 outTxts.close() 65 outTxts.close()
66 inFile.close()
65 67