I  mean, one very low-brow, trivial way to do it would be to write:

(BindLink
   (VariableList
       (TypedVariable (Variable "SRC") (Type 'GeneNode))
       (TypedVariable (Variable "TGT") (Type 'MoleculeNode))
       (TypedVariable (Variable "XPS") (Type 'PredicateNode)))
   ; what you are looking for
   (Evaluation (Variable "XPS")(List (Variable "SRC") (Variable "TGT")))
   ; what to do when you find it
   (ExecutationOutput
        (GroundedSchema "scm:print-stuff")
        (List (Variable "SRC") (Variable "TGT") (Variable "XPS") ))

; and then define the printer:

(define (print-stuff src tgt xps)
   (format #t "{ \"data\": {\"source\": \"~A\", \"target\": \"~A\", "name":
\"~A\", \"group\": \"edges\"}}"
       (cog-name src) (cog-name tgt) (cog-name xps))
   ; a return value
   xps)

I mean -- this is low-brow, simple, bordering on trite, but does what you
want to do, for your example.  There are other ways of doing this that are
even simpler, but the above is a good demo.  Maybe you need more
sophisticated features, but the above is lots easier than trying to figure
out LALR.   I mean, knowing what LALR is and having experience with it is a
"good thing", but its overkill for this particular problem.

--linas

On Sat, Jun 29, 2019 at 3:58 PM Linas Vepstas <linasveps...@gmail.com>
wrote:

>
>
> On Sat, Jun 29, 2019 at 3:54 PM Xabush Semrie <hsami...@gmail.com> wrote:
>
>>
>> why the heck would you need to "parse" atomese?
>>
>>  What are you actually trying to do?
>>
>>
>> I am converting it to JSON for graph visualization with Cytoscape.js for
>> an annotation service. For example,
>> (EvaluationLink
>>  (PredicateNode "expresses")
>>  (ListLink
>>     (GeneNode "MAP2K4")
>>     (MoleculeNode "Uniprot:Q5U0B8")))
>>
>> The above will be "parsed" into the following JSON
>> {
>>   "data": {"source": "MAP2K4", "target": "Uniprot:Q5U0B8", "name":
>> "expresses", "group": "edges"}
>> }
>>
>>
> Why not just dump directly from the atomspace?
>
>
>>  Especially since it already comes with a built-in parser?
>>
>>
>> Maybe I am confusing something here, but I didn't know any parser existed
>> for my use case.
>>
>
> ? Of course there is. It's called "the atomspace".
>
> --linas
>
>>
>>
>> On Saturday, June 29, 2019 at 11:43:55 PM UTC+3, linas wrote:
>>>
>>> Dumb question: why the heck would you need to "parse" atomese?
>>> Especially since it already comes with a built-in parser?  What are you
>>> actually trying to do? --linas
>>>
>>> On Sat, Jun 29, 2019 at 10:04 AM Xabush Semrie <hsam...@gmail.com>
>>> wrote:
>>>
>>>> Hi,
>>>>
>>>> I have been working recently on LALR parser to parse atomese to
>>>> JSON(code can be found here
>>>> <https://github.com/Habush/annotation-scheme/blob/de66cd29c375321e5c7a14741a91c40ac40fb0b9/helpers/atomese-parser.scm#L98>).
>>>> I initially used the same LALR parser generator used by GHOST found in 
>>>> *(system
>>>> base lalr)* module with a similar lexer generator (in my case I
>>>> precompiled the regex patterns for performance gain). However, I was
>>>> getting very bad performance and it took way too long to parse moderately
>>>> sized atomese files. It didn't help that the module didn't provided its own
>>>> lexer generator and in the case of the GHOST code, the regex patterns were
>>>> not precompiled which would further degrade the performance. As a result, I
>>>> started looking at alternatives and found the nyacc project.
>>>>
>>>> After rewriting the code using nyacc, I found that the nyacc parser
>>>> generator on average is 5-6X faster than the previous parser generator
>>>> (which used by GHOST) for the same file. In addition to the performance
>>>> improvement, it removes the need to provide a manually written lexer
>>>> generator, has support for mid-rule context actions for complicated
>>>> production rules, has a better debugging and "logging" capabilities and
>>>> (although minor) doesn't require to list all the terminal symbols. Also the
>>>> project is also being actively developed.
>>>>
>>>> Hence, I deduced the GHOST parser could also benefit the same
>>>> performance improvements and thought sharing this here. I am happy to work
>>>> on porting the LALR parser from the current one to nyacc if this gets
>>>> traction.
>>>>
>>>> --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "opencog" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an email to ope...@googlegroups.com.
>>>> To post to this group, send email to ope...@googlegroups.com.
>>>> Visit this group at https://groups.google.com/group/opencog.
>>>> To view this discussion on the web visit
>>>> https://groups.google.com/d/msgid/opencog/f3d23857-71b2-40a8-b99d-86249f9bd71a%40googlegroups.com
>>>> <https://groups.google.com/d/msgid/opencog/f3d23857-71b2-40a8-b99d-86249f9bd71a%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>> .
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>
>>>
>>> --
>>> cassette tapes - analog TV - film cameras - you
>>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "opencog" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to opencog+unsubscr...@googlegroups.com.
>> To post to this group, send email to opencog@googlegroups.com.
>> Visit this group at https://groups.google.com/group/opencog.
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/opencog/c1ab0355-de77-428b-b8ce-baba885dd157%40googlegroups.com
>> <https://groups.google.com/d/msgid/opencog/c1ab0355-de77-428b-b8ce-baba885dd157%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>
> --
> cassette tapes - analog TV - film cameras - you
>


-- 
cassette tapes - analog TV - film cameras - you

-- 
You received this message because you are subscribed to the Google Groups 
"opencog" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to opencog+unsubscr...@googlegroups.com.
To post to this group, send email to opencog@googlegroups.com.
Visit this group at https://groups.google.com/group/opencog.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/opencog/CAHrUA36GEZVTM0NaVLDS3vY%3DvTF%2Bh%2BBvc12Lc5Ts95kwJjNTog%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to