Michael,

Sorry, I mean split into phrases with the cross join just operating at the 
'like word' level as follows 

car was red and next to a crimson motor
motor was red and next to a crimson motor
vehicle  was red and next to a crimson motor
car was rouge and next to a crimson motor
car *was* crimson *and next to a* crimson motor
... and so on...

Do you think this would be possible so that the output could effectively 
cross join x times on the underlined (or any defined equivalent word) to 
provide all equivalent phrases? 

I think it is quite a challenge to do this elegantly!

Regards

Phil




On Monday, 30 September 2013 21:37:27 UTC+1, Michael Moore wrote:
>
> Phil, 
> you can do it with SQL, but it gets kind of ugly.
>
> SELECT EXTRACTVALUE (VALUE (d), '/g') AS rslt
>   FROM TABLE
>           (XMLSEQUENCE
>               (EXTRACT
>                   (XMLTYPE.createxml (   '<row><g>'
>                                       || REPLACE
>                                                 ('car was red and next to 
> a crimson motor',
>                                                  ' ',
>                                                  '</g><g>'
>                                                 )
>                                       || '</g></row>'
>                                      ),
>                    '/row/g'
>                   )
>               )
>           ) d;
>
>
> RSLT                                                                       
>      
>
> --------------------------------------------------------------------------------
> car                                                                       
>       
> was                                                                       
>       
> red                                                                       
>       
> and                                                                       
>       
> next                                                                       
>      
> to                                                                         
>      
> a                                                                         
>       
> crimson                                                                   
>       
> motor                                                                     
>       
>
> 9 rows selected. 
> If this is something going into a production environment, I would use 
> PL/SQL, simply for debugging reasons. 
> Mike
>
>
>
> On Mon, Sep 30, 2013 at 1:19 PM, Phil W <philwi...@gmail.com <javascript:>
> > wrote:
>
>> David,
>>
>> This is spot on and where I'd almost arrived at but what I'm ideally 
>> looking for is to return a set of results from an input string of several 
>> words. Unfortunately, I won't know if there are 2, 3 or 8 words and some 
>> will not have a likeness to worry about.
>>
>> For example: 'car was red and next to a crimson motor'
>>
>> I'm really wondering if SQL alone can do this and will probably have to 
>> try and write a function. The function will have to dynamically split the 
>> phrase up into sections to cater for the like words and then cross join the 
>> whole thing together.
>>
>> Thanks v much for your help so far!
>>
>> Phil
>>
>>
>> On Monday, 30 September 2013 16:19:37 UTC+1, ddf wrote:
>>>
>>>
>>> On Sunday, September 29, 2013 12:19:11 PM UTC-6, Michael Moore wrote:
>>>>
>>>> SQL> DROP TABLE syn
>>>> Table dropped.
>>>> SQL> CREATE TABLE syn
>>>> (
>>>>    val   VARCHAR2 (30),
>>>>    lik   VARCHAR2 (30)
>>>> )
>>>> Table created.
>>>> SQL> INSERT ALL
>>>>   INTO syn
>>>> VALUES ('red', 'red')
>>>>   INTO syn
>>>> VALUES ('red', 'rouge')
>>>>   INTO syn
>>>> VALUES ('red', 'crimson')
>>>>   INTO syn
>>>> VALUES ('car', 'car')
>>>>   INTO syn
>>>> VALUES ('car', 'motor')
>>>>   INTO syn
>>>> VALUES ('car', 'vehicle')
>>>>    SELECT 1 FROM DUAL
>>>> 6 rows created.
>>>> SQL> COMMIT
>>>> Commit complete.
>>>> SQL> SELECT x.lik, y.lik
>>>>   FROM syn x CROSS JOIN syn y
>>>>  WHERE x.val = 'red' AND y.val = 'car'
>>>>
>>>> LIK                            LIK_1                         
>>>> ------------------------------ ------------------------------
>>>> red                            car                           
>>>> red                            motor                         
>>>> red                            vehicle                       
>>>> rouge                          car                           
>>>> rouge                          motor                         
>>>> rouge                          vehicle                       
>>>> crimson                        car                           
>>>> crimson                        motor                         
>>>> crimson                        vehicle                       
>>>>
>>>> 9 rows selected.
>>>>
>>>>
>>>> On Sun, Sep 29, 2013 at 3:51 AM, Phil W <philwi...@gmail.com> wrote:
>>>>
>>>>> Given a phase, and a table of "like" words, essentially a thesaurus, 
>>>>> I'd like to generate all permutations of the phrase 
>>>>> making use of the thesaurus entries. 
>>>>>
>>>>> I am sure it is possible in an SQL statement as I'd like to avoid 
>>>>> PL/SQL if possible but I am thinking now that a function/pipelined 
>>>>> function might be my only option. Does anyone with better SQL than me 
>>>>> know 
>>>>> how this can be done please?
>>>>>
>>>>> create table word_syn
>>>>> (value varchar2(30),
>>>>>  likeness varchar2(30))
>>>>> /
>>>>>
>>>>> insert all 
>>>>> into word_syn values ('red','rouge')
>>>>> into word_syn values ('red','crimson')
>>>>> into word_syn values ('car','motor')
>>>>> into word_syn values ('car','vehicle')
>>>>> select 1 from dual
>>>>> /
>>>>>
>>>>>
>>>>> /* Find options for "big red car"
>>>>>    Desired output is:
>>>>>    big rouge car
>>>>>    big rouge motor
>>>>>    big rouge vehicle
>>>>>    big red motor
>>>>>    big crimson motor... and so on.
>>>>> */
>>>>>
>>>>>
>>>>>  -- 
>>>>> -- 
>>>>> You received this message because you are subscribed to the Google
>>>>> Groups "Oracle PL/SQL" group.
>>>>> To post to this group, send email to oracle...@googlegroups.com
>>>>> To unsubscribe from this group, send email to
>>>>> Oracle-PLSQL...@googlegroups.**com
>>>>> For more options, visit this group at
>>>>> http://groups.google.com/**group/Oracle-PLSQL?hl=en<http://groups.google.com/group/Oracle-PLSQL?hl=en>
>>>>>  
>>>>> --- 
>>>>> You received this message because you are subscribed to the Google 
>>>>> Groups "Oracle PL/SQL" group.
>>>>> To unsubscribe from this group and stop receiving emails from it, send 
>>>>> an email to oracle-plsql...@googlegroups.**com.
>>>>> For more options, visit 
>>>>> https://groups.google.com/**groups/opt_out<https://groups.google.com/groups/opt_out>
>>>>> .
>>>>>
>>>>
>>>>  
>>>  Taking this one step further:
>>>  
>>>  SQL> select z.likeness, alike, blike
>>>   2  from (select a1.likeness alike, b1.likeness blike from word_syn a1 
>>> cross join word_syn b1
>>>   3  where b1.value = 'car' and a1.value='red') cross join word_syn z
>>>   4  where z.value = 'big'
>>>   5  /
>>>  
>>> LIKENESS                       ALIKE                          BLIKE
>>> ------------------------------ ------------------------------ 
>>> ------------------------------
>>> big                            red                            car
>>> huge                           red                            car
>>> large                          red                            car
>>> gigantic                       red                            car
>>> grand                          red                            car
>>> humongous                      red                            car
>>> big                            red                            motor
>>> huge                           red                            motor
>>> large                          red                            motor
>>> gigantic                       red                            motor
>>> grand                          red                            motor
>>>  
>>> LIKENESS                       ALIKE                          BLIKE
>>> ------------------------------ ------------------------------ 
>>> ------------------------------
>>> humongous                      red                            motor
>>> big                            red                            vehicle
>>> huge                           red                            vehicle
>>> large                          red                            vehicle
>>> gigantic                       red                            vehicle
>>> grand                          red                            vehicle
>>> humongous                      red                            vehicle
>>> big                            rouge                          car
>>> huge                           rouge                          car
>>> large                          rouge                          car
>>> gigantic                       rouge                          car
>>>  
>>> LIKENESS                       ALIKE                          BLIKE
>>> ------------------------------ ------------------------------ 
>>> ------------------------------
>>> grand                          rouge                          car
>>> humongous                      rouge                          car
>>> big                            rouge                          motor
>>> huge                           rouge                          motor
>>> large                          rouge                          motor
>>> gigantic                       rouge                          motor
>>> grand                          rouge                          motor
>>> humongous                      rouge                          motor
>>> big                            rouge                          vehicle
>>> huge                           rouge                          vehicle
>>> large                          rouge                          vehicle
>>>  
>>> LIKENESS                       ALIKE                          BLIKE
>>> ------------------------------ ------------------------------ 
>>> ------------------------------
>>> gigantic                       rouge                          vehicle
>>> grand                          rouge                          vehicle
>>> humongous                      rouge                          vehicle
>>> big                            crimson                        car
>>> huge                           crimson                        car
>>> large                          crimson                        car
>>> gigantic                       crimson                        car
>>> grand                          crimson                        car
>>> humongous                      crimson                        car
>>> big                            crimson                        motor
>>> huge                           crimson                        motor
>>>  
>>> LIKENESS                       ALIKE                          BLIKE
>>> ------------------------------ ------------------------------ 
>>> ------------------------------
>>> large                          crimson                        motor
>>> gigantic                       crimson                        motor
>>> grand                          crimson                        motor
>>> humongous                      crimson                        motor
>>> big                            crimson                        vehicle
>>> huge                           crimson                        vehicle
>>> large                          crimson                        vehicle
>>> gigantic                       crimson                        vehicle
>>> grand                          crimson                        vehicle
>>> humongous                      crimson                        vehicle
>>>  
>>> 54 rows selected.
>>>  
>>> SQL>
>>>  
>>>  
>>> David Fitzjarrell
>>>
>>  -- 
>> -- 
>> You received this message because you are subscribed to the Google
>> Groups "Oracle PL/SQL" group.
>> To post to this group, send email to oracle...@googlegroups.com<javascript:>
>> To unsubscribe from this group, send email to
>> oracle-plsql...@googlegroups.com <javascript:>
>> For more options, visit this group at
>> http://groups.google.com/group/Oracle-PLSQL?hl=en
>>  
>> --- 
>> You received this message because you are subscribed to the Google Groups 
>> "Oracle PL/SQL" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to oracle-plsql...@googlegroups.com <javascript:>.
>> For more options, visit https://groups.google.com/groups/opt_out.
>>
>
>

-- 
-- 
You received this message because you are subscribed to the Google
Groups "Oracle PL/SQL" group.
To post to this group, send email to Oracle-PLSQL@googlegroups.com
To unsubscribe from this group, send email to
oracle-plsql-unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/Oracle-PLSQL?hl=en

--- 
You received this message because you are subscribed to the Google Groups 
"Oracle PL/SQL" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to oracle-plsql+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to