Options

[SOLVED] Read and extract texual content from clusters

John_DavisJohn_Davis Member Posts: 9 Contributor II
edited November 2018 in Help
Hello,

I'm doing K-means clustering on textual segments using the «cut documents» operator. Clustering is thus applied to I00objects collection (textual segments).  At the ead of the process, the example tab  only shows the  textual segments with their filtered process (tokenized, stemmed...); these segments are therefore unreadable. What can I do to have acces to the unmodified textual segments of each cluster ? Here is the process:

create document -- cut document--process document (tokenize/Filter)- clustering(k-means)-results (example set)  

Thanks for your support

John      

Answers

  • Options
    MariusHelfMariusHelf RapidMiner Certified Expert, Member Posts: 1,869 Unicorn
    Hi John,

    did you try to activate the keep_text parameter in the Process Documents operator?

    Best regards,
    Marius
  • Options
    John_DavisJohn_Davis Member Posts: 9 Contributor II
    Hi Marius,

    The keep_text parameter is in fact activated. Thus, the text of each segments cluster appear  in the column «text» of the example set tab. The problem is that it does not appear in its integral version, but in  its «vectorised» one ( eg. only tokens that remained after filtering). This problem does not occure when doing  clustering process from files. Maybe it's related to the fact that the process_document operator input is ihere «I00object collection»... Is their a way to have acces to the unmodified textuel segments of each cluster ?

    Once again, thanks for your support

    John
    P.S My process:
    Create document---cut documents---process documents ( tokenize/stemmin/filter)---k-means clustering
     
  • Options
    MariusHelfMariusHelf RapidMiner Certified Expert, Member Posts: 1,869 Unicorn
    Oh, you are right. I would consider this a bug and filed an internal bugreport. As a workaround, you could use Generate Id before Process Documents and join the output of Process Documents with the unmodified data as in the process below.

    Best regards,
    Marius
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <process version="5.3.007">
      <context>
        <input/>
        <output/>
        <macros/>
      </context>
      <operator activated="true" class="process" compatibility="5.3.007" expanded="true" name="Process">
        <process expanded="true">
          <operator activated="true" class="generate_nominal_data" compatibility="5.3.007" expanded="true" height="60" name="Generate Nominal Data" width="90" x="45" y="30">
            <parameter key="number_of_attributes" value="1"/>
          </operator>
          <operator activated="true" class="nominal_to_text" compatibility="5.3.007" expanded="true" height="76" name="Nominal to Text" width="90" x="179" y="30"/>
          <operator activated="true" class="generate_id" compatibility="5.3.007" expanded="true" height="76" name="Generate ID" width="90" x="313" y="120"/>
          <operator activated="true" class="multiply" compatibility="5.3.007" expanded="true" height="94" name="Multiply" width="90" x="447" y="120"/>
          <operator activated="true" class="text:process_document_from_data" compatibility="5.3.000" expanded="true" height="76" name="Process Documents from Data" width="90" x="581" y="30">
            <parameter key="vector_creation" value="Term Frequency"/>
            <list key="specify_weights"/>
            <process expanded="true">
              <operator activated="true" class="text:tokenize" compatibility="5.3.000" expanded="true" height="60" name="Tokenize" width="90" x="45" y="30"/>
              <operator activated="true" class="text:filter_stopwords_english" compatibility="5.3.000" expanded="true" height="60" name="Filter Stopwords (English)" width="90" x="180" y="30"/>
              <connect from_port="document" to_op="Tokenize" to_port="document"/>
              <connect from_op="Tokenize" from_port="document" to_op="Filter Stopwords (English)" to_port="document"/>
              <connect from_op="Filter Stopwords (English)" from_port="document" to_port="document 1"/>
              <portSpacing port="source_document" spacing="0"/>
              <portSpacing port="sink_document 1" spacing="0"/>
              <portSpacing port="sink_document 2" spacing="0"/>
            </process>
          </operator>
          <operator activated="true" class="join" compatibility="5.3.007" expanded="true" height="76" name="Join" width="90" x="715" y="120">
            <list key="key_attributes"/>
          </operator>
          <connect from_op="Generate Nominal Data" from_port="output" to_op="Nominal to Text" to_port="example set input"/>
          <connect from_op="Nominal to Text" from_port="example set output" to_op="Generate ID" to_port="example set input"/>
          <connect from_op="Generate ID" from_port="example set output" to_op="Multiply" to_port="input"/>
          <connect from_op="Multiply" from_port="output 1" to_op="Process Documents from Data" to_port="example set"/>
          <connect from_op="Multiply" from_port="output 2" to_op="Join" to_port="right"/>
          <connect from_op="Process Documents from Data" from_port="example set" to_op="Join" to_port="left"/>
          <connect from_op="Join" from_port="join" to_port="result 1"/>
          <portSpacing port="source_input 1" spacing="0"/>
          <portSpacing port="sink_result 1" spacing="0"/>
          <portSpacing port="sink_result 2" spacing="0"/>
        </process>
      </operator>
    </process>
  • Options
    John_DavisJohn_Davis Member Posts: 9 Contributor II
    Hi Marius,

    I think I'am getting closer, but I still don't know where to connect the «create document» operator and the «cut document» operator. If «mutltiplicity» operator and «join» operator are bolth connected to the «process document», how can I connect the «cut document» operator ? I have a hard time reading codes. If its possible, an image of the entire process operators and connections would help me a lot.

    Yours

    John   


  • Options
    MariusHelfMariusHelf RapidMiner Certified Expert, Member Posts: 1,869 Unicorn
    Hi,

    in combination with Cut Documents the process gets a bit more complicated, since you have to separate the document splitting from the actual text processing. Actually, you have to first cut the documents, then create the id, process the documents and then join the results together.

    Btw, you can directly paste the XML below into RapidMiner. The post linked in my signature tells you how.

    Best regards,
    Marius
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <process version="5.3.007">
      <context>
        <input/>
        <output/>
        <macros/>
      </context>
      <operator activated="true" class="process" compatibility="5.3.007" expanded="true" name="Process">
        <process expanded="true">
          <operator activated="true" class="generate_data_user_specification" compatibility="5.3.007" expanded="true" height="60" name="Generate Data by User Specification" width="90" x="45" y="30">
            <list key="attribute_values">
              <parameter key="original_text" value="&quot;X this is a simple XY test text Y&quot;"/>
            </list>
            <list key="set_additional_roles"/>
          </operator>
          <operator activated="true" class="generate_data_user_specification" compatibility="5.3.007" expanded="true" height="60" name="Generate Data by User Specification (2)" width="90" x="45" y="120">
            <list key="attribute_values">
              <parameter key="original_text" value="&quot;X this is another XY text Y&quot;"/>
            </list>
            <list key="set_additional_roles"/>
          </operator>
          <operator activated="true" class="append" compatibility="5.3.007" expanded="true" height="94" name="Append" width="90" x="179" y="30"/>
          <operator activated="true" class="nominal_to_text" compatibility="5.3.007" expanded="true" height="76" name="Nominal to Text" width="90" x="313" y="30"/>
          <operator activated="true" class="text:process_document_from_data" compatibility="5.3.000" expanded="true" height="76" name="Process Documents from Data (2)" width="90" x="45" y="210">
            <parameter key="create_word_vector" value="false"/>
            <parameter key="vector_creation" value="Term Frequency"/>
            <parameter key="add_meta_information" value="false"/>
            <parameter key="keep_text" value="true"/>
            <list key="specify_weights"/>
            <process expanded="true">
              <operator activated="true" class="text:cut_document" compatibility="5.3.000" expanded="true" height="60" name="Cut Document (2)" width="90" x="179" y="30">
                <parameter key="query_type" value="Regular Expression"/>
                <list key="string_machting_queries">
                  <parameter key="text" value="X.X"/>
                </list>
                <list key="regular_expression_queries">
                  <parameter key="xes" value="X(.+)X"/>
                  <parameter key="yes" value="Y(.+)Y"/>
                </list>
                <list key="regular_region_queries"/>
                <list key="xpath_queries"/>
                <list key="namespaces"/>
                <list key="index_queries"/>
                <process expanded="true">
                  <connect from_port="segment" to_port="document 1"/>
                  <portSpacing port="source_segment" spacing="0"/>
                  <portSpacing port="sink_document 1" spacing="0"/>
                  <portSpacing port="sink_document 2" spacing="0"/>
                </process>
              </operator>
              <connect from_port="document" to_op="Cut Document (2)" to_port="document"/>
              <connect from_op="Cut Document (2)" from_port="documents" to_port="document 1"/>
              <portSpacing port="source_document" spacing="0"/>
              <portSpacing port="sink_document 1" spacing="0"/>
              <portSpacing port="sink_document 2" spacing="0"/>
            </process>
          </operator>
          <operator activated="true" class="generate_id" compatibility="5.3.007" expanded="true" height="76" name="Generate ID" width="90" x="179" y="210"/>
          <operator activated="true" class="set_role" compatibility="5.3.007" expanded="true" height="76" name="Set Role" width="90" x="313" y="210">
            <parameter key="attribute_name" value="text"/>
            <list key="set_additional_roles"/>
          </operator>
          <operator activated="true" class="multiply" compatibility="5.3.007" expanded="true" height="94" name="Multiply" width="90" x="447" y="210"/>
          <operator activated="true" class="text:process_document_from_data" compatibility="5.3.000" expanded="true" height="76" name="Process Documents from Data" width="90" x="581" y="165">
            <parameter key="vector_creation" value="Term Frequency"/>
            <list key="specify_weights"/>
            <process expanded="true">
              <operator activated="true" class="text:tokenize" compatibility="5.3.000" expanded="true" height="60" name="Tokenize" width="90" x="45" y="30"/>
              <operator activated="true" class="text:filter_stopwords_english" compatibility="5.3.000" expanded="true" height="60" name="Filter Stopwords (English)" width="90" x="180" y="30"/>
              <connect from_port="document" to_op="Tokenize" to_port="document"/>
              <connect from_op="Tokenize" from_port="document" to_op="Filter Stopwords (English)" to_port="document"/>
              <connect from_op="Filter Stopwords (English)" from_port="document" to_port="document 1"/>
              <portSpacing port="source_document" spacing="0"/>
              <portSpacing port="sink_document 1" spacing="0"/>
              <portSpacing port="sink_document 2" spacing="0"/>
            </process>
          </operator>
          <operator activated="true" class="join" compatibility="5.3.007" expanded="true" height="76" name="Join" width="90" x="715" y="210">
            <parameter key="remove_double_attributes" value="false"/>
            <list key="key_attributes"/>
          </operator>
          <connect from_op="Generate Data by User Specification" from_port="output" to_op="Append" to_port="example set 1"/>
          <connect from_op="Generate Data by User Specification (2)" from_port="output" to_op="Append" to_port="example set 2"/>
          <connect from_op="Append" from_port="merged set" to_op="Nominal to Text" to_port="example set input"/>
          <connect from_op="Nominal to Text" from_port="example set output" to_op="Process Documents from Data (2)" to_port="example set"/>
          <connect from_op="Process Documents from Data (2)" from_port="example set" to_op="Generate ID" to_port="example set input"/>
          <connect from_op="Generate ID" from_port="example set output" to_op="Set Role" to_port="example set input"/>
          <connect from_op="Set Role" from_port="example set output" to_op="Multiply" to_port="input"/>
          <connect from_op="Multiply" from_port="output 1" to_op="Process Documents from Data" to_port="example set"/>
          <connect from_op="Multiply" from_port="output 2" to_op="Join" to_port="right"/>
          <connect from_op="Process Documents from Data" from_port="example set" to_op="Join" to_port="left"/>
          <connect from_op="Join" from_port="join" to_port="result 1"/>
          <portSpacing port="source_input 1" spacing="0"/>
          <portSpacing port="sink_result 1" spacing="180"/>
          <portSpacing port="sink_result 2" spacing="0"/>
        </process>
      </operator>
    </process>
  • Options
    John_DavisJohn_Davis Member Posts: 9 Contributor II
    Hello Marius,

    I'm almost there ! The process seams to work, but I'm not able to set and connect the operators that provides wordlist and vectors that usually appear in the example set tab at the end of the process. Is there a way to get the wordlist of that process ?

    I have pasted right under my process (XML) which includes the k-means and the nominal to numeric operator. I hope everything is right  ?

    Thanks for your support
    John

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <process version="5.3.005">
     <context>
       <input/>
       <output/>
       <macros/>
     </context>
     <operator activated="true" class="process" compatibility="5.3.005" expanded="true" name="Process">
       <process expanded="true">
         <operator activated="true" class="text:create_document" compatibility="5.3.000" expanded="true" height="60" name="Create Document" width="90" x="45" y="30">
           <parameter key="text" value="Segment/ peu importe le résultat des votes de grève, les cours continueront coûte que coûte. C'est ainsi que la sous-ministre adjointe à l'enseignement supérieur, dans une récente lettre envoyée aux administrations des cégeps, a souligné que les étudiants ne sont pas assujettis au Code du travail, affirmé que la grève est un moyen qui relève de la liberté d'expression et stipulé que les institutions devaient créer les conditions pour que les étudiants qui désirent continuer leur cours puissent le faire. L'Université de Montréal et l'UQAM ont emboîté le pas à cette interprétation et averti les étudiants que les cours se maintiendront pour ceux qui ne participent pas aux «boycotts». En agissant de la sorte, le gouvernement et les administrations universitaires montrent non seulement qu'ils cèdent à la panique, mais surtout qu'ils sont prêts à mettre au rancart l'engagement moral qui balise la conduite de la démocratie étudiante depuis longtemps. Il est vrai que le droit de grève des étudiants n'est formellement reconnu dans aucune loi. Mais en pratique, le gouvernement et les institutions d'enseignement ont admis le droit de grève, pourvu qu'il résulte d'un vote , démocratique ,. Ce faisant, ils reconnaissaient que la décision était le résultat d'un processus démocratique et évitait, à l'instar du monde syndical, que les opinions ne s'affrontent autrement que par des votes en assemblée générale. En brisant cette entente cordiale, le gouvernement et les établissements universitaires minent gravement les institutions étudiantes en tentant de saper leur légitimité. En ne reconnaissant plus les votes de grève, ils lancent le message que les exercices de citoyenneté que constituent les assemblées générales et les décisions collectives qui en découlent ne valent rien. Surtout, ils essaient délibérément d'inoculer le venin de la bisbille en encourageant les étudiants eux-mêmes à ne pas respecter les votes de grève, obligeant ceux qui les honorent à des actions plus musclées. Les conditions se mettent en place pour que la sécurité des étudiants soit compromise. Fin/&#10;Segment/ C'est ainsi que la sous-ministre adjointe à l'enseignement supérieur, dans une récente lettre envoyée aux administrations des cégeps, a souligné que les étudiants ne sont pas assujettis au Code du travail, affirmé que la grève est un moyen qui relève de la liberté d'expression et stipulé que les institutions devaient créer les conditions pour que les étudiants qui désirent continuer leur cours puissent le faire. L'Université de Montréal et l'UQAM ont emboîté le pas à cette interprétation et averti les étudiants que les cours se maintiendront pour ceux qui ne participent pas aux «boycotts». En agissant de la sorte, le gouvernement et les administrations universitaires montrent non seulement qu'ils cèdent à la panique, mais surtout qu'ils sont prêts à mettre au rancart l'engagement moral qui balise la conduite de la démocratie étudiante depuis longtemps. Il est vrai que le droit de grève des étudiants n'est formellement reconnu dans aucune loi. Mais en pratique, le gouvernement et les institutions d'enseignement ont admis le droit de grève, pourvu qu'il résulte d'un vote démocratique. Ce faisant, ils reconnaissaient que la décision était le résultat d'un processus , démocratique ,et évitait, à l'instar du monde syndical, que les opinions ne s'affrontent autrement que par des votes en assemblée générale. En brisant cette entente cordiale, le gouvernement et les établissements universitaires minent gravement les institutions étudiantes en tentant de saper leur légitimité. En ne reconnaissant plus les votes de grève, ils lancent le message que les exercices de citoyenneté que constituent les assemblées générales et les décisions collectives qui en découlent ne valent rien. Surtout, ils essaient délibérément d'inoculer le venin de la bisbille en encourageant les étudiants eux-mêmes à ne pas respecter les votes de grève, obligeant ceux qui les honorent à des actions plus musclées. Les conditions se mettent en place pour que la sécurité des étudiants soit compromise. Cette attitude est peut-être valable sur le plan tactique, mais complètement irresponsable au regard de la valeur accordée à l'exercice de la citoyenneté et à la sécurité des étudiants . Fin/&#10;"/>
           <parameter key="add label" value="true"/>
           <parameter key="label_type" value="text"/>
           <parameter key="label_value" value="Texte original"/>
         </operator>
         <operator activated="true" class="text:process_documents" compatibility="5.3.000" expanded="true" height="94" name="Process Documents" width="90" x="112" y="120">
           <parameter key="vector_creation" value="Term Frequency"/>
           <parameter key="add_meta_information" value="false"/>
           <parameter key="keep_text" value="true"/>
           <process expanded="true">
             <operator activated="true" class="text:cut_document" compatibility="5.3.000" expanded="true" height="60" name="Cut Document" width="90" x="45" y="75">
               <parameter key="query_type" value="Regular Region"/>
               <list key="string_machting_queries"/>
               <list key="regular_expression_queries"/>
               <list key="regular_region_queries">
                 <parameter key="Contexte" value="Segment/.Fin/"/>
               </list>
               <list key="xpath_queries"/>
               <list key="namespaces"/>
               <list key="index_queries"/>
               <process expanded="true">
                 <connect from_port="segment" to_port="document 1"/>
                 <portSpacing port="source_segment" spacing="0"/>
                 <portSpacing port="sink_document 1" spacing="0"/>
                 <portSpacing port="sink_document 2" spacing="0"/>
               </process>
             </operator>
             <connect from_port="document" to_op="Cut Document" to_port="document"/>
             <connect from_op="Cut Document" from_port="documents" to_port="document 1"/>
             <portSpacing port="source_document" spacing="0"/>
             <portSpacing port="sink_document 1" spacing="0"/>
             <portSpacing port="sink_document 2" spacing="0"/>
           </process>
         </operator>
         <operator activated="true" class="append" compatibility="5.3.005" expanded="true" height="76" name="Append" width="90" x="246" y="30"/>
         <operator activated="true" class="nominal_to_text" compatibility="5.3.005" expanded="true" height="76" name="Nominal to Text" width="90" x="380" y="30"/>
         <operator activated="true" class="generate_id" compatibility="5.3.005" expanded="true" height="76" name="Generate ID" width="90" x="112" y="300"/>
         <operator activated="true" class="set_role" compatibility="5.3.005" expanded="true" height="76" name="Set Role" width="90" x="246" y="300">
           <parameter key="name" value="text"/>
           <list key="set_additional_roles"/>
         </operator>
         <operator activated="true" class="multiply" compatibility="5.3.005" expanded="true" height="94" name="Multiply" width="90" x="380" y="300"/>
         <operator activated="true" class="text:process_document_from_data" compatibility="5.3.000" expanded="true" height="76" name="Process Documents from Data" width="90" x="514" y="165">
           <parameter key="vector_creation" value="Term Frequency"/>
           <parameter key="keep_text" value="true"/>
           <list key="specify_weights"/>
           <process expanded="true">
             <operator activated="true" class="text:tokenize" compatibility="5.3.000" expanded="true" height="60" name="Tokenize" width="90" x="45" y="30"/>
             <operator activated="true" class="text:filter_stopwords_french" compatibility="5.3.000" expanded="true" height="60" name="Filter Stopwords (French)" width="90" x="179" y="30"/>
             <operator activated="true" class="text:filter_by_length" compatibility="5.3.000" expanded="true" height="60" name="Filter Tokens (by Length)" width="90" x="313" y="30">
               <parameter key="min_chars" value="3"/>
             </operator>
             <connect from_port="document" to_op="Tokenize" to_port="document"/>
             <connect from_op="Tokenize" from_port="document" to_op="Filter Stopwords (French)" to_port="document"/>
             <connect from_op="Filter Stopwords (French)" from_port="document" to_op="Filter Tokens (by Length)" to_port="document"/>
             <connect from_op="Filter Tokens (by Length)" from_port="document" to_port="document 1"/>
             <portSpacing port="source_document" spacing="0"/>
             <portSpacing port="sink_document 1" spacing="0"/>
             <portSpacing port="sink_document 2" spacing="0"/>
           </process>
         </operator>
         <operator activated="true" class="join" compatibility="5.3.005" expanded="true" height="76" name="Join" width="90" x="514" y="345">
           <parameter key="remove_double_attributes" value="false"/>
           <list key="key_attributes"/>
         </operator>
         <operator activated="true" class="nominal_to_numerical" compatibility="5.3.005" expanded="true" height="94" name="Nominal to Numerical" width="90" x="447" y="480">
           <list key="comparison_groups"/>
         </operator>
         <operator activated="true" class="k_means" compatibility="5.3.005" expanded="true" height="76" name="Clustering" width="90" x="581" y="480">
           <parameter key="k" value="3"/>
         </operator>
         <connect from_op="Create Document" from_port="output" to_op="Process Documents" to_port="documents 1"/>
         <connect from_op="Process Documents" from_port="example set" to_op="Append" to_port="example set 1"/>
         <connect from_op="Append" from_port="merged set" to_op="Nominal to Text" to_port="example set input"/>
         <connect from_op="Nominal to Text" from_port="example set output" to_op="Generate ID" to_port="example set input"/>
         <connect from_op="Generate ID" from_port="example set output" to_op="Set Role" to_port="example set input"/>
         <connect from_op="Set Role" from_port="example set output" to_op="Multiply" to_port="input"/>
         <connect from_op="Multiply" from_port="output 1" to_op="Process Documents from Data" to_port="example set"/>
         <connect from_op="Multiply" from_port="output 2" to_op="Join" to_port="right"/>
         <connect from_op="Process Documents from Data" from_port="example set" to_op="Join" to_port="left"/>
         <connect from_op="Join" from_port="join" to_op="Nominal to Numerical" to_port="example set input"/>
         <connect from_op="Nominal to Numerical" from_port="example set output" to_op="Clustering" to_port="example set"/>
         <connect from_op="Clustering" from_port="cluster model" to_port="result 1"/>
         <connect from_op="Clustering" from_port="clustered set" to_port="result 2"/>
         <portSpacing port="source_input 1" spacing="0"/>
         <portSpacing port="sink_result 1" spacing="180"/>
         <portSpacing port="sink_result 2" spacing="0"/>
         <portSpacing port="sink_result 3" spacing="0"/>
       </process>
     </operator>
    </process>
  • Options
    MariusHelfMariusHelf RapidMiner Certified Expert, Member Posts: 1,869 Unicorn
    Hi,

    I don't understand the question - to see the wordlist, just connect the wordlist port (wor) of the second Process Documents operator to the process output on the right.

    Btw, I suppose you cut down the process for the forums? Because in my case it only contains one document and does not finish completely. However, the process setup looks fine.

    Best regards,
    Marius
  • Options
    John_DavisJohn_Davis Member Posts: 9 Contributor II
    Hi,

    Actually, the wordlist port is activated. The message I receive when starting the process is:

    [i«Input example set does not have ID attribute» ,  «Offending operator: Join».

    Their is a «Generate ID» operator in the process, so I don't understand why it says so. The only difference between the process you've given me and my processs remains at the starting point. One starts with  «Generate Data by user specification» (your process) and the other one starts with «Create Document » and «Process» (mine). Here is my process  to illustrates the problem.

    Yours truly
    John

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <process version="5.3.005">
      <context>
        <input/>
        <output/>
        <macros/>
      </context>
      <operator activated="true" class="process" compatibility="5.3.005" expanded="true" name="Process">
        <process expanded="true">
          <operator activated="true" class="text:create_document" compatibility="5.3.000" expanded="true" height="60" name="Create Document" width="90" x="45" y="75">
            <parameter key="text" value="Segment/ Il est aussi difficile de faire valoir son point de vue au micro, surtout si les opinions vont à l'encontre de la majorité. Gabriel Nadeau-Dubois rétorque que la nature du vote est votée en début d'assemblée et dépend des statuts de l'association. Concernant la taille des salles, les associations font de leur mieux, mais elles n'ont pas toujours accès aux plus grands auditoriums. «Et j'ai jamais vu une assemblée refuser des gens», a-t-il assuré. Comment faire pour que les assemblées de vote de grève ne tournent en foire d'empoigne au profit des pro-grève qui en connaissent généralement parfaitement tous les rouages? «Je sais que les associations font tout ce qu'elles peuvent pour , démocratiser ,les règles de procédures et les rendre plus accessibles», a affirmé M. Nadeau-Dubois. Le camp «contre» ne donne pas non plus sa place. Résolument en défaveur d'un débrayage, les étudiants de l'École d'aérotechnique du cégep Édouard-Montpetit ont voté pour un moratoire sur la tenue du vote de grève, question d'en finir pour de bon avec le débat. «On est en discussion avec eux pour qu'un vote puisse se tenir. Qu'il soit favorable ou non», a dit le président de la Fédération étudiante collégiale du Québec (FECQ), Léo Bureau-Blouin.Les cégépiens donnent leur appui Les étudiants déjà en grève pourront compter dès lundi sur le soutien des cégépiens. Fin/&#10;Segment/ &quot;Quand on a décidé de faire la grève, c'était pour changer le rapport de force&quot;, souligne-t-il, ajoutant que les étudiants ont accompli leur mission puisque, sous la pression, le gouvernement a imposé une loi spéciale. Matthieu Lizotte était présent lors du vote. Pour lui, les étudiants aux cycles supérieurs en sociologie ont tout simplement joué leur rôle en désertant leurs salles de cours. &quot;Mais on aurait été plus fiers si on n'avait pas eu à aller en grève du tout&quot;, affirme-t-il. Guillaume Turgeon estime que le jeu en a valu la chandelle, même si, 100 jours plus tard, Québec n'est pas revenu sur sa décision de hausser les droits de scolarité. &quot;Les étudiants ont été persévérants, ils se sont politisés de façon réelle&quot;, fait-il valoir, ajoutant que le conflit a entre autres permis d'élargir le débat sur la , démocratie ,et la liberté d'association. Louise Gallien croit qu'il faut se rappeler que c'est à Québec que tout a commencé. &quot;Ça prouve que ce ne sont pas des gens qui pensent juste à leur nombril. Québec, c'est aussi des gens qui veulent changer les choses&quot;, conclut-elle. (s) : , PASCAL RATTHÉ C'est dans le local 3470 du pavillon Charles-De Koninck que les étudiants de l'Association des chercheuses et chercheurs étudiants en sociologie (ACCES) ont voté pour la grève générale le 8 février. Fin/&#10;Segment/ Si la détermination est présente, ayons confiance. === 69. ·20120523·LA·0058 2012-05-23 Ai-je été naïf? Plutôt que de prendre part à des manifestations dangereuses, que les jeunes s'engagent en masse dans les partis politiques Mario Bissonnette L'auteur est un enseignant d'histoire et d'éducation à la citoyenneté en quatrième secondaire. Cela fait 20 ans que j'enseigne l'histoire au secondaire et s'il est un sujet auquel j'ai consacré réflexion, temps et énergie au cours de ces années, c'est celui de l'éducation citoyenne de mes élèves. Dès le début de ma carrière et jusqu'à aujourd'hui, j'ai cru qu'enseigner les fondements et les rouages de notre , démocratie ,était une tâche justifiée et pertinente. Ai-je été naïf pendant toutes ces années en croyant que je faisais oeuvre utile en initiant mes jeunes de 16 ans à la démocratie québécoise et canadienne? Est-ce en vain qu'année après année, mes élèves ont, lors de voyages à Ottawa, assisté aux travaux de la Chambre des communes, que plusieurs d'entre eux ont pris part aux simulations parlementaires de l'Assemblée nationale à Québec et que des centaines d'adolescents de mon école ont participé à des simulations électorales? Était-ce vraiment utile que j'invite mon député à venir parler du fonctionnement de nos institutions démocratiques, de son travail de parlementaire et des enjeux de l'heure avec mes élèves? J'en doute depuis quelques semaines. Les terribles images de Montréal rappelant ce qu'était Belfast il y a 35 ans m'ont profondément troublé. Fin/&#10;Segment/ === 69. ·20120523·LA·0058 2012-05-23 Ai-je été naïf? Plutôt que de prendre part à des manifestations dangereuses, que les jeunes s'engagent en masse dans les partis politiques Mario Bissonnette L'auteur est un enseignant d'histoire et d'éducation à la citoyenneté en quatrième secondaire. Cela fait 20 ans que j'enseigne l'histoire au secondaire et s'il est un sujet auquel j'ai consacré réflexion, temps et énergie au cours de ces années, c'est celui de l'éducation citoyenne de mes élèves. Dès le début de ma carrière et jusqu'à aujourd'hui, j'ai cru qu'enseigner les fondements et les rouages de notre démocratie était une tâche justifiée et pertinente. Ai-je été naïf pendant toutes ces années en croyant que je faisais oeuvre utile en initiant mes jeunes de 16 ans à la , démocratie ,québécoise et canadienne? Est-ce en vain qu'année après année, mes élèves ont, lors de voyages à Ottawa, assisté aux travaux de la Chambre des communes, que plusieurs d'entre eux ont pris part aux simulations parlementaires de l'Assemblée nationale à Québec et que des centaines d'adolescents de mon école ont participé à des simulations électorales? Était-ce vraiment utile que j'invite mon député à venir parler du fonctionnement de nos institutions démocratiques, de son travail de parlementaire et des enjeux de l'heure avec mes élèves? J'en doute depuis quelques semaines. Les terribles images de Montréal rappelant ce qu'était Belfast il y a 35 ans m'ont profondément troublé. Au-delà de la question du partage des responsabilités entre le gouvernement et le mouvement étudiant dans la crise que nous vivons actuellement, c'est bien plus celle de savoir comment sortir de ce bien triste printemps québécois qui me préoccupe. Fin/&#10;"/>
          </operator>
          <operator activated="true" class="text:process_documents" compatibility="5.3.000" expanded="true" height="94" name="Process Documents" width="90" x="179" y="30">
            <parameter key="create_word_vector" value="false"/>
            <parameter key="vector_creation" value="Term Frequency"/>
            <parameter key="add_meta_information" value="false"/>
            <parameter key="keep_text" value="true"/>
            <process expanded="true">
              <connect from_port="document" to_port="document 1"/>
              <portSpacing port="source_document" spacing="0"/>
              <portSpacing port="sink_document 1" spacing="0"/>
              <portSpacing port="sink_document 2" spacing="0"/>
            </process>
          </operator>
          <operator activated="true" class="append" compatibility="5.3.005" expanded="true" height="76" name="Append" width="90" x="313" y="30"/>
          <operator activated="true" class="nominal_to_text" compatibility="5.3.005" expanded="true" height="76" name="Nominal to Text" width="90" x="447" y="75"/>
          <operator activated="true" class="text:process_document_from_data" compatibility="5.3.000" expanded="true" height="76" name="Process Documents from Data (2)" width="90" x="45" y="165">
            <parameter key="create_word_vector" value="false"/>
            <parameter key="add_meta_information" value="false"/>
            <parameter key="keep_text" value="true"/>
            <list key="specify_weights"/>
            <process expanded="true">
              <operator activated="true" class="text:cut_document" compatibility="5.3.000" expanded="true" height="60" name="Cut Document" width="90" x="112" y="75">
                <parameter key="query_type" value="Regular Region"/>
                <list key="string_machting_queries"/>
                <list key="regular_expression_queries"/>
                <list key="regular_region_queries">
                  <parameter key="original_text" value="Segment/.Fin/"/>
                </list>
                <list key="xpath_queries"/>
                <list key="namespaces"/>
                <list key="index_queries"/>
                <process expanded="true">
                  <connect from_port="segment" to_port="document 1"/>
                  <portSpacing port="source_segment" spacing="0"/>
                  <portSpacing port="sink_document 1" spacing="0"/>
                  <portSpacing port="sink_document 2" spacing="0"/>
                </process>
              </operator>
              <connect from_port="document" to_op="Cut Document" to_port="document"/>
              <connect from_op="Cut Document" from_port="documents" to_port="document 1"/>
              <portSpacing port="source_document" spacing="0"/>
              <portSpacing port="sink_document 1" spacing="0"/>
              <portSpacing port="sink_document 2" spacing="0"/>
            </process>
          </operator>
          <operator activated="true" class="generate_id" compatibility="5.3.005" expanded="true" height="76" name="Generate ID" width="90" x="112" y="300"/>
          <operator activated="true" class="set_role" compatibility="5.3.005" expanded="true" height="76" name="Set Role" width="90" x="246" y="210">
            <parameter key="name" value="text"/>
            <list key="set_additional_roles"/>
          </operator>
          <operator activated="true" class="multiply" compatibility="5.3.005" expanded="true" height="94" name="Multiply" width="90" x="313" y="345"/>
          <operator activated="true" class="text:process_document_from_data" compatibility="5.3.000" expanded="true" height="76" name="Process Documents from Data" width="90" x="447" y="210">
            <parameter key="vector_creation" value="Term Frequency"/>
            <list key="specify_weights">
              <parameter key="text" value="1.0"/>
            </list>
            <process expanded="true">
              <operator activated="true" class="text:tokenize" compatibility="5.3.000" expanded="true" height="60" name="Tokenize" width="90" x="45" y="30"/>
              <operator activated="true" class="text:filter_stopwords_french" compatibility="5.3.000" expanded="true" height="60" name="Filter Stopwords (French)" width="90" x="179" y="30"/>
              <operator activated="true" class="text:filter_by_length" compatibility="5.3.000" expanded="true" height="60" name="Filter Tokens (by Length)" width="90" x="313" y="30">
                <parameter key="min_chars" value="3"/>
              </operator>
              <connect from_port="document" to_op="Tokenize" to_port="document"/>
              <connect from_op="Tokenize" from_port="document" to_op="Filter Stopwords (French)" to_port="document"/>
              <connect from_op="Filter Stopwords (French)" from_port="document" to_op="Filter Tokens (by Length)" to_port="document"/>
              <connect from_op="Filter Tokens (by Length)" from_port="document" to_port="document 1"/>
              <portSpacing port="source_document" spacing="0"/>
              <portSpacing port="sink_document 1" spacing="0"/>
              <portSpacing port="sink_document 2" spacing="0"/>
            </process>
          </operator>
          <operator activated="true" class="join" compatibility="5.3.005" expanded="true" height="76" name="Join" width="90" x="447" y="480">
            <parameter key="remove_double_attributes" value="false"/>
            <list key="key_attributes"/>
          </operator>
          <connect from_op="Create Document" from_port="output" to_op="Process Documents" to_port="documents 1"/>
          <connect from_op="Process Documents" from_port="example set" to_op="Append" to_port="example set 1"/>
          <connect from_op="Append" from_port="merged set" to_op="Nominal to Text" to_port="example set input"/>
          <connect from_op="Nominal to Text" from_port="example set output" to_op="Process Documents from Data (2)" to_port="example set"/>
          <connect from_op="Process Documents from Data (2)" from_port="example set" to_op="Generate ID" to_port="example set input"/>
          <connect from_op="Generate ID" from_port="example set output" to_op="Set Role" to_port="example set input"/>
          <connect from_op="Set Role" from_port="example set output" to_op="Multiply" to_port="input"/>
          <connect from_op="Multiply" from_port="output 1" to_op="Process Documents from Data" to_port="example set"/>
          <connect from_op="Multiply" from_port="output 2" to_op="Join" to_port="right"/>
          <connect from_op="Process Documents from Data" from_port="example set" to_op="Join" to_port="left"/>
          <connect from_op="Process Documents from Data" from_port="word list" to_port="result 2"/>
          <connect from_op="Join" from_port="join" to_port="result 1"/>
          <portSpacing port="source_input 1" spacing="0"/>
          <portSpacing port="sink_result 1" spacing="0"/>
          <portSpacing port="sink_result 2" spacing="0"/>
          <portSpacing port="sink_result 3" spacing="0"/>
        </process>
      </operator>
    </process>
  • Options
    John_DavisJohn_Davis Member Posts: 9 Contributor II
    Eureka !

    The process now works !  The problem was (I think) related to the position of the «set role» operator. It seems that, in that perticular case, this one has to be after the «multiplicity» operator.

    Thanks a lot for your help ! This problem gave me a great «work around» through a lot of different operators. The process is next below.

    Best regards !
    John

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <process version="5.3.005">
      <context>
        <input/>
        <output/>
        <macros/>
      </context>
      <operator activated="true" class="process" compatibility="5.3.005" expanded="true" name="Process">
        <process expanded="true">
          <operator activated="true" class="text:create_document" compatibility="5.3.000" expanded="true" height="60" name="Create Document" width="90" x="45" y="75">
            <parameter key="text" value="Segment/ Il est aussi difficile de faire valoir son point de vue au micro, surtout si les opinions vont à l'encontre de la majorité. Gabriel Nadeau-Dubois rétorque que la nature du vote est votée en début d'assemblée et dépend des statuts de l'association. Concernant la taille des salles, les associations font de leur mieux, mais elles n'ont pas toujours accès aux plus grands auditoriums. «Et j'ai jamais vu une assemblée refuser des gens», a-t-il assuré. Comment faire pour que les assemblées de vote de grève ne tournent en foire d'empoigne au profit des pro-grève qui en connaissent généralement parfaitement tous les rouages? «Je sais que les associations font tout ce qu'elles peuvent pour , démocratiser ,les règles de procédures et les rendre plus accessibles», a affirmé M. Nadeau-Dubois. Le camp «contre» ne donne pas non plus sa place. Résolument en défaveur d'un débrayage, les étudiants de l'École d'aérotechnique du cégep Édouard-Montpetit ont voté pour un moratoire sur la tenue du vote de grève, question d'en finir pour de bon avec le débat. «On est en discussion avec eux pour qu'un vote puisse se tenir. Qu'il soit favorable ou non», a dit le président de la Fédération étudiante collégiale du Québec (FECQ), Léo Bureau-Blouin.Les cégépiens donnent leur appui Les étudiants déjà en grève pourront compter dès lundi sur le soutien des cégépiens. Fin/&#10;Segment/ &quot;Quand on a décidé de faire la grève, c'était pour changer le rapport de force&quot;, souligne-t-il, ajoutant que les étudiants ont accompli leur mission puisque, sous la pression, le gouvernement a imposé une loi spéciale. Matthieu Lizotte était présent lors du vote. Pour lui, les étudiants aux cycles supérieurs en sociologie ont tout simplement joué leur rôle en désertant leurs salles de cours. &quot;Mais on aurait été plus fiers si on n'avait pas eu à aller en grève du tout&quot;, affirme-t-il. Guillaume Turgeon estime que le jeu en a valu la chandelle, même si, 100 jours plus tard, Québec n'est pas revenu sur sa décision de hausser les droits de scolarité. &quot;Les étudiants ont été persévérants, ils se sont politisés de façon réelle&quot;, fait-il valoir, ajoutant que le conflit a entre autres permis d'élargir le débat sur la , démocratie ,et la liberté d'association. Louise Gallien croit qu'il faut se rappeler que c'est à Québec que tout a commencé. &quot;Ça prouve que ce ne sont pas des gens qui pensent juste à leur nombril. Québec, c'est aussi des gens qui veulent changer les choses&quot;, conclut-elle. (s) : , PASCAL RATTHÉ C'est dans le local 3470 du pavillon Charles-De Koninck que les étudiants de l'Association des chercheuses et chercheurs étudiants en sociologie (ACCES) ont voté pour la grève générale le 8 février. Fin/&#10;Segment/ Si la détermination est présente, ayons confiance. === 69. •20120523•LA•0058 2012-05-23 Ai-je été naïf? Plutôt que de prendre part à des manifestations dangereuses, que les jeunes s'engagent en masse dans les partis politiques Mario Bissonnette L'auteur est un enseignant d'histoire et d'éducation à la citoyenneté en quatrième secondaire. Cela fait 20 ans que j'enseigne l'histoire au secondaire et s'il est un sujet auquel j'ai consacré réflexion, temps et énergie au cours de ces années, c'est celui de l'éducation citoyenne de mes élèves. Dès le début de ma carrière et jusqu'à aujourd'hui, j'ai cru qu'enseigner les fondements et les rouages de notre , démocratie ,était une tâche justifiée et pertinente. Ai-je été naïf pendant toutes ces années en croyant que je faisais oeuvre utile en initiant mes jeunes de 16 ans à la démocratie québécoise et canadienne? Est-ce en vain qu'année après année, mes élèves ont, lors de voyages à Ottawa, assisté aux travaux de la Chambre des communes, que plusieurs d'entre eux ont pris part aux simulations parlementaires de l'Assemblée nationale à Québec et que des centaines d'adolescents de mon école ont participé à des simulations électorales? Était-ce vraiment utile que j'invite mon député à venir parler du fonctionnement de nos institutions démocratiques, de son travail de parlementaire et des enjeux de l'heure avec mes élèves? J'en doute depuis quelques semaines. Les terribles images de Montréal rappelant ce qu'était Belfast il y a 35 ans m'ont profondément troublé. Fin/&#10;Segment/ === 69. •20120523•LA•0058 2012-05-23 Ai-je été naïf? Plutôt que de prendre part à des manifestations dangereuses, que les jeunes s'engagent en masse dans les partis politiques Mario Bissonnette L'auteur est un enseignant d'histoire et d'éducation à la citoyenneté en quatrième secondaire. Cela fait 20 ans que j'enseigne l'histoire au secondaire et s'il est un sujet auquel j'ai consacré réflexion, temps et énergie au cours de ces années, c'est celui de l'éducation citoyenne de mes élèves. Dès le début de ma carrière et jusqu'à aujourd'hui, j'ai cru qu'enseigner les fondements et les rouages de notre démocratie était une tâche justifiée et pertinente. Ai-je été naïf pendant toutes ces années en croyant que je faisais oeuvre utile en initiant mes jeunes de 16 ans à la , démocratie ,québécoise et canadienne? Est-ce en vain qu'année après année, mes élèves ont, lors de voyages à Ottawa, assisté aux travaux de la Chambre des communes, que plusieurs d'entre eux ont pris part aux simulations parlementaires de l'Assemblée nationale à Québec et que des centaines d'adolescents de mon école ont participé à des simulations électorales? Était-ce vraiment utile que j'invite mon député à venir parler du fonctionnement de nos institutions démocratiques, de son travail de parlementaire et des enjeux de l'heure avec mes élèves? J'en doute depuis quelques semaines. Les terribles images de Montréal rappelant ce qu'était Belfast il y a 35 ans m'ont profondément troublé. Au-delà de la question du partage des responsabilités entre le gouvernement et le mouvement étudiant dans la crise que nous vivons actuellement, c'est bien plus celle de savoir comment sortir de ce bien triste printemps québécois qui me préoccupe. Fin/&#10;Segment/ C'est ce que les démocrates nomment un consensus. Je ne crois pas que vous perdriez la face à agir ainsi. Je ne crois pas que l'on vous accuserait d'avoir cédé au chantage de la rue. Je crois que cela marquerait plutôt le moment où vous avez pris de la hauteur ; le moment où vous avez mis les intérêts supérieurs de la nation au-dessus de ceux des partis ou des ego. Vous feriez alors la seule oeuvre qui compte véritablement pour le chef d'une démocratie. Vous mettriez en place les conditions d'un dialogue où la pluralité irréductible des opinions se fond dans la solidarité des décisions , démocratiques ,. Vous deviendriez alors le premier ministre de tous les Québécois. Il n'en tient qu'à vous. *** Dominic Gélinas - Montréal, le 21 mai 2012 === 69. •20120523•LS•0061 2012-05-23 Appel au boycottage de Desjardins Yves Therrien Le maire de Saint-Anselme de Bellechasse, Michel Bonneau, emploie le qualificatif videur de régions dans une lettre envoyée aux médias au sujet du regroupement des centres financiers aux entreprises (CFE) de Bellechasse et de Lotbinière avec celui de Lévis. Il en appelle même au boycottage de l'institution coopérative qui se comporte comme une banque en fermant des points de services, mais pire encore en &quot;se sauvant avec des emplois&quot; vitaux pour un village comme le sien. Fin/&#10;Segment/ &quot;Ça me donne l'espoir qu'on va gagner la bataille contre le cynisme - la première qu'on doit gagner si on veut changer les choses&quot;, a déclaréFrançois Legault. Un seul couac pour lui, hier. Les délégués ont refusé d'adopter sa résolution de compromis sur le conflit étudiant . Celle-ci prévoyait un remboursement des prêts à hauteur de 5 % de leur revenu annuel sur une période de 10 ans, période au-delà de laquelle la créance serait annulée. La proposition devra être étoffée par la commission politique du parti. Ni à droite, ni à gauche Jean Allaire pense que la défunte Action , démocratique ,du Québec, qu'il a cofondée avec Mario Dumont, a fortement influencé le programme fondateur de la CAQ. François Legault voit les choses autrement. Il répète que son parti n'est ni à droite, ni à gauche. Il fait valoir qu'il défend des mesures dites de droite et d'autres dites de gauche. La Coalition ne s'est pas contentée d'adopter son premier programme ces dernières heures. Elle a aussi brocardé ses adversaires, associant le gouvernement de Jean Charest à un régime de &quot;petits amis&quot; et le Parti québécois à une formation &quot;obsédée par le prochain référendum&quot;. Fin/"/>
          </operator>
          <operator activated="true" class="text:cut_document" compatibility="5.3.000" expanded="true" height="60" name="Cut Document" width="90" x="179" y="75">
            <parameter key="query_type" value="Regular Region"/>
            <list key="string_machting_queries"/>
            <list key="regular_expression_queries"/>
            <list key="regular_region_queries">
              <parameter key="original_text" value="Segment/.Fin/"/>
            </list>
            <list key="xpath_queries"/>
            <list key="namespaces"/>
            <list key="index_queries"/>
            <process expanded="true">
              <connect from_port="segment" to_port="document 1"/>
              <portSpacing port="source_segment" spacing="0"/>
              <portSpacing port="sink_document 1" spacing="0"/>
              <portSpacing port="sink_document 2" spacing="0"/>
            </process>
          </operator>
          <operator activated="true" class="text:process_documents" compatibility="5.3.000" expanded="true" height="94" name="Process Documents" width="90" x="313" y="75">
            <parameter key="create_word_vector" value="false"/>
            <parameter key="add_meta_information" value="false"/>
            <parameter key="keep_text" value="true"/>
            <process expanded="true">
              <connect from_port="document" to_port="document 1"/>
              <portSpacing port="source_document" spacing="0"/>
              <portSpacing port="sink_document 1" spacing="0"/>
              <portSpacing port="sink_document 2" spacing="0"/>
            </process>
          </operator>
          <operator activated="true" class="nominal_to_text" compatibility="5.3.005" expanded="true" height="76" name="Nominal to Text" width="90" x="45" y="255"/>
          <operator activated="true" class="generate_id" compatibility="5.3.005" expanded="true" height="76" name="Generate ID" width="90" x="179" y="255"/>
          <operator activated="true" class="multiply" compatibility="5.3.005" expanded="true" height="94" name="Multiply" width="90" x="313" y="255"/>
          <operator activated="true" class="set_role" compatibility="5.3.005" expanded="true" height="76" name="Set Role" width="90" x="313" y="480">
            <parameter key="name" value="text"/>
            <list key="set_additional_roles"/>
          </operator>
          <operator activated="true" class="text:process_document_from_data" compatibility="5.3.000" expanded="true" height="76" name="Process Documents from Data" width="90" x="447" y="480">
            <parameter key="keep_text" value="true"/>
            <list key="specify_weights"/>
            <process expanded="true">
              <operator activated="true" class="text:tokenize" compatibility="5.3.000" expanded="true" height="60" name="Tokenize" width="90" x="45" y="120"/>
              <operator activated="true" class="text:filter_stopwords_french" compatibility="5.3.000" expanded="true" height="60" name="Filter Stopwords (French)" width="90" x="179" y="210"/>
              <operator activated="true" class="text:filter_by_length" compatibility="5.3.000" expanded="true" height="60" name="Filter Tokens (by Length)" width="90" x="313" y="255">
                <parameter key="min_chars" value="3"/>
              </operator>
              <connect from_port="document" to_op="Tokenize" to_port="document"/>
              <connect from_op="Tokenize" from_port="document" to_op="Filter Stopwords (French)" to_port="document"/>
              <connect from_op="Filter Stopwords (French)" from_port="document" to_op="Filter Tokens (by Length)" to_port="document"/>
              <connect from_op="Filter Tokens (by Length)" from_port="document" to_port="document 1"/>
              <portSpacing port="source_document" spacing="0"/>
              <portSpacing port="sink_document 1" spacing="0"/>
              <portSpacing port="sink_document 2" spacing="0"/>
            </process>
          </operator>
          <operator activated="true" class="join" compatibility="5.3.005" expanded="true" height="76" name="Join" width="90" x="447" y="255">
            <list key="key_attributes"/>
          </operator>
          <operator activated="true" class="k_means" compatibility="5.3.005" expanded="true" height="76" name="Clustering" width="90" x="581" y="210">
            <parameter key="k" value="3"/>
          </operator>
          <connect from_op="Create Document" from_port="output" to_op="Cut Document" to_port="document"/>
          <connect from_op="Cut Document" from_port="documents" to_op="Process Documents" to_port="documents 1"/>
          <connect from_op="Process Documents" from_port="example set" to_op="Nominal to Text" to_port="example set input"/>
          <connect from_op="Nominal to Text" from_port="example set output" to_op="Generate ID" to_port="example set input"/>
          <connect from_op="Generate ID" from_port="example set output" to_op="Multiply" to_port="input"/>
          <connect from_op="Multiply" from_port="output 1" to_op="Join" to_port="left"/>
          <connect from_op="Multiply" from_port="output 2" to_op="Set Role" to_port="example set input"/>
          <connect from_op="Set Role" from_port="example set output" to_op="Process Documents from Data" to_port="example set"/>
          <connect from_op="Process Documents from Data" from_port="example set" to_op="Join" to_port="right"/>
          <connect from_op="Process Documents from Data" from_port="word list" to_port="result 1"/>
          <connect from_op="Join" from_port="join" to_op="Clustering" to_port="example set"/>
          <connect from_op="Clustering" from_port="cluster model" to_port="result 2"/>
          <connect from_op="Clustering" from_port="clustered set" to_port="result 3"/>
          <portSpacing port="source_input 1" spacing="0"/>
          <portSpacing port="sink_result 1" spacing="0"/>
          <portSpacing port="sink_result 2" spacing="0"/>
          <portSpacing port="sink_result 3" spacing="0"/>
          <portSpacing port="sink_result 4" spacing="0"/>
        </process>
      </operator>
    </process>



Sign In or Register to comment.