MathGroup Archive 2009

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Re: Finding the Position of Elements in a

  • To: mathgroup at smc.vnet.net
  • Subject: [mg102253] Re: [mg102195] Re: [mg102157] Finding the Position of Elements in a
  • From: Leonid Shifrin <lshifr at gmail.com>
  • Date: Tue, 4 Aug 2009 06:21:38 -0400 (EDT)
  • References: <200907310953.FAA19267@smc.vnet.net>

Hi Gregory,

taking the (perhaps overly conservative) definition of a word as a string
matching the
pattern (LetterCharacter ..),  the function below will hopefully do what you
need

wordMatchPositions[listOfStrings : {__String}, searchWord_String] :=
  Position[
   StringCases[listOfStrings, LetterCharacter ..],
   _?(MemberQ[#, searchWord] &)];


Regards,
Leonid

On Sat, Aug 1, 2009 at 11:58 AM, Gregory Lypny
<gregory.lypny at videotron.ca>wrote:

>
> Thanks again Leonid,
>
> I'll give this one a whirl.
>
>        Gregory
>
>
> On 31-Jul-09, at 10:16 AM, Leonid Shifrin wrote:
>
> > Hi Gregory,
> >
> > just an amendment to my previous post:
> >
> > memberPositions[listOfStrings,
> > Flatten@StringCases[listOfStrings, __ ~~ searchString ~~ ___]]
> >
> > (I was missing Flatten).
> >
> > Also, I have realized that there are easier ways, like this, for
> > example:
> >
> > Select[Transpose[{Range[Length[listOfStrings]],
> >     StringCases[
> >      listOfStrings, __ ~~
> >       searchString ~~ ___]}], #[[2]] =!= {} &][[All, 1]]
> >
> >
> > Regarding your request to test for individual words - quite doable,
> > I just happen
> > to have zero time at the moment, to do it carefully. In case if  no
> > other solution is suggested,I will post one on Monday.
> >
> > Regards,
> > Leonid
> >
> >
> >
> > On Fri, Jul 31, 2009 at 4:13 PM, Gregory Lypny <
> gregory.lypny at videotron.ca
> > > wrote:
> >       Just what I needed.  Thank you, Leonid, and I will thumb through
> > your book.  One of the things I want to work on is a function that
> > finds a word (string that is space delimited on both sides or one
> > side if occurring at the beginning or end of a string).  It would
> > work something like
> >
> >       If theSearchString is among the words of theTargetString then
> > return True
> >
> > This is a function that Runtime Revolution (a.k.a MetaCard and
> > originally HyperCard) has, and it is indispensible.
> >
> >       Regards,
> >
> >               Gregory
> >
> >
> >
> > On Fri, Jul 31, 2009, at 7:12 AM, Leonid Shifrin wrote:
> >
> >> Hi Gregory.
> >>
> >> Position[listOfStrings,x_/;StringMatchQ[x, __ ~~ searchString ~~
> >> ___]],
> >>
> >> if your list is not too large. If it is, and you want to speed it
> >> up, one quick
> >> solution is to use StringCases (as you did) to produce the list of
> >> matches,
> >> and then the <memberPositions> function that I developed in my book:
> >>
> >> http://www.mathprogramming-intro.org/book/node596.html
> >>
> >> ,see at the bottom of the page - you feed both the original list
> >> and the list of results to it, like this:
> >>
> >> memberPositions[listOfStrings,
> >> StringCases[listOfStrings, __ ~~ searchString ~~ ___]]
> >>
> >> I expect this to be fast even for large lists of strings:
> >> StringCases is much faster when used on a whole list of strings
> >> rather than used separately on each string, and my function is also
> >> rather fast. I did not benchmark you problem though, so it is just
> >> my guess that this way will be faster than the first one above.
> >>
> >>
> >> Hope this helps.
> >>
> >> Regards,
> >> Leonid
> >>
> >>
> >>
> >>
> >> On Fri, Jul 31, 2009 at 1:53 PM, Gregory Lypny <
> gregory.lypny at videotron.ca
> >> > wrote:
> >> Hello everyone,
> >>
> >> Suppose I have a list of strings, say, sentences such as
> >>
> >>        listOfStrings = {"The cat is here.", "It's not here.",  "Not
> >> in the
> >> catalogue,", "Where is the cat?"}
> >>
> >> and a string I want to search for
> >>
> >>        searchString = "cat"
> >>
> >> I can use StringCases to pick off the elements that contain the
> >> search
> >> string
> >>
> >>        StringCases[listOfStrings, __ ~~ searchString ~~ ___]
> >>
> >>        {{"The cat is here."}, {}, {"Not in the catalogue,"},
> >> {"Where is the
> >> cat?"}}
> >>
> >> But what if I just want to know the positions of the elements that
> >> are
> >> hits?  In this case, it's
> >>
> >>        {1, 3, 4}
> >>
> >> If I use
> >>
> >>        Position[listOfStrings, ___ ~~ theString ~~ ___]
> >>
> >> I get
> >>
> >>        {}
> >>
> >> which is not what I expect.  Also how can I have my searchString
> >> treated like it is a word so that 3 is not one of the hits?
> >>
> >> Any hints would be much appreciated.
> >>
> >>        Gregory
> >>
> >>
> >
> >
>


  • Prev by Date: Re: Re: Assume and $Assumptions and Results
  • Next by Date: solving for a second function
  • Previous by thread: Re: Multiplication of matrices
  • Next by thread: Re: Re: Finding the Position of Elements in a