namefreq.fsp - Frink Server Pages highlighter

[Try namefreq.fsp]

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
            "http://www.w3.org/TR/html4/strict.dtd">
<HTML LANG="en">
 <HEAD>
  <TITLE>Name Frequency</TITLE>
  <META HTTP-EQUIV="Default-Style" CONTENT="APE Airy">
  <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8"> 
  <LINK REL="StyleSheet" HREF="/frinkdocs/apeairy.css" TYPE="text/css"
        TITLE="APE Airy"> 
  <LINK REL="Alternate StyleSheet" HREF="/frinkdocs/style.css" TYPE="text/css"
        TITLE="APE Classic">
  <LINK REL="Alternate StyleSheet" HREF="/frinkdocs/style2.css" TYPE="text/css"
        TITLE="Compact"> 
  <LINK REL="icon" HREF="/images/futureboyicon.png" TYPE="image/png">
  <META NAME="viewport" CONTENT="width=device-width, initial-scale=1.0">
 </HEAD>

 <BODY>
  <H1>Name Frequency</H1>

  <P>
   This program predicts the number of people having your name, based on
   U.S. Census data.<BR>
   For the first or last name, you can enter multiple
   variations of the name separated by spaces, such as "Bob Robert Bobby Rob".
  </P>
  
  <P>
   Enter a name:
  </P>
  
  <% pop = pop ? pop : "300 million"
     firstName = firstName ? firstName : ""
     lastName = lastName ? lastName : ""  
  %>

  <FORM ACTION="namefreq.fsp" METHOD="GET">
   First: <INPUT TYPE="TEXT" NAME="firstName" VALUE="$firstName"><BR>
   Last: <INPUT TYPE="TEXT" NAME="lastName" VALUE="$lastName"><BR>
   Population: <INPUT TYPE="TEXT" NAME="pop" VALUE="$pop"><BR>
   <INPUT TYPE="SUBMIT" VALUE="Submit">
  </FORM>
  
  <%
   if (pop && firstName && lastName)
   {
      pop = eval[pop]

      println["<P>Fetching data...</P>"]

      println["\nProbability of name \"$firstName $lastName\": <BR>"]

      firstFreq = frequency[firstName, true]
      println["Frequency of $firstName (in either sex) is: " + (firstFreq -> "percent") + "<BR>"]

      lastFreq = frequency[lastName, false]
      if (lastFreq != 0)
      {
         ratio = floor[1/lastFreq]
  println["Frequency of $lastName is: " + (lastFreq -> "percent") + " (about 1 in $ratio)<BR>"]
      }

      if lastFreq == 0
        println["<B>Probability of last name is too low for prediction.</B><BR>"]
       if firstFreq ==0
          println["<B>Probability of first name is too low for prediction.</B><BR>"]
  
     if ((firstFreq != 0) && (lastFreq != 0))
     {
         together = firstFreq * lastFreq

         //println[together -> "percent"]

         println["\nThis name is probably held by 1 in " + ceil[1/together] + " people.<BR>"]

         println["This name will occur with probability " + (probTogether[firstFreq, lastFreq, pop] -> "percent") + " in $pop people.<BR>"]

         println["This name will occur with probability 50% in every " + predictTogether[firstFreq, lastFreq] + " people.<BR>"]

         println["There are probably " + round[together * pop, .1] + " people with this name in $pop people.<BR>"]

         // Functions used by above program

         // Probability of a single name with frequency freq being in a movie with
         // chars characters...
         probAlone[freq, chars] := 1 - (1-freq)^chars

         // Probability those two names appear together in n people
         probTogether[probA, probB, pop] := 1 - (1 - probA * probB)^pop

         // Predict the number of movies to get a 50% probability
         predictTogether[probA, probB] := ceil[- ln[2] / ln[1 - probA * probB]]
      }
   }

   // Contact www.placesnamed.com and fetch probabilities.
   frequency[names, first=true] :=
   {
      nameList = split[%r/[\s,\/]+/, names]
      freq = 0
      for [name] nameList
      {
         if name == ""
            next          // Ignore leading/trailing space
         [let1, let2] = name =~ %r/(.)(.)/  // Get first 2 letters
         let1 = lc[let1]
         let2 = lc[let2]
         url = "http://www.placesnamed.com/$let1/$let2/" + lc[name] + ".asp"

         if (first)
         {
            pattern = regex["$name.* popular ((?:fe)?male).*frequency is (.*?)%","i"]
            for [line] lines[url]
               if [sex, p] = line =~ pattern
               {
                  pp = eval[p] percent
                  if (pp != 0)
                  {
                     ratio = floor[1/pp]
                     println["$name ($sex): $p% (about 1 in $ratio)<BR>"]
                     freq = freq + pp
                  }
               }
         } else   // Last name
         {
            pattern = regex["$name.* popular .*last.*frequency is (.*?)%","i"]

            for [line] lines[url]
               if [p] = line =~ pattern
                  freq = freq + eval[p] percent
         }
      }

      if (first)
         return freq/2
      else
         return freq
   }
  %>
  
  <HR>
  <P>
   <I><A HREF="mailto:eliasen@mindspring.com">Alan Eliasen</A></I> was born
   <%= round[now[] - #1969-08-19 04:54 PM Mountain#, minute] -> ["days", "hours", "minutes"] %> ago.
  </P>

  <P>
   Back to <A HREF="/frinkdocs/fspdocs.html">Frink Server Pages
    documentation.</A>
  </P>  
 </BODY>
</HTML>

[Try namefreq.fsp]


Alan Eliasen was born 20218 days, 1 hours, 4 minutes ago.

Back to Frink Server Pages documentation.