Jairo Blanco

Blog de Jairo Blanco

Comentando tecnologías web.
Página principal » Generar palabras claves (keywords) automáticamente

Generar palabras claves (keywords) automáticamente (1,012 lecturas)

9 Mayo, 2007 por jairo

La etiqueta "KEYWORDS" del HEAD es usada para informar a los robots de los motores de búsqueda de las palabras por las que quiere ser encontrada la página cuando alguien haga una búsqueda.

En la actualidad gran número de motores de búsqueda ignoran la meta etiqueta"KEYWORDS" pero los que no lo hacen la lectura de estas etiquetas sirve para reforzar las palabras clave incluidas en la meta etiqueta "DESCRIPTION" y en el cuerpo de la pagina dentro de la etiqueta BODY.

Lo ideal y es introducir manualmente las keywords seleccionando aquellas palabras o frases que más se repiten o que un usuario buscando sus productos o servicios escribiría en un buscador. También nos aseguraríamos de que las palabras más importantes esten al principio de la cadena, en plural, minúsculas y que no se repitan. Pero, posiblemente no todo el mundo tenga tiempo para realizar esta tarea y sobre todo si se enfrentan a un texto bastante extenso.

AutoKeywords.

Una solución simple y que te descargará de este trabajo es implementar un pequeño sistema de generación automática de keywords en tu página web que genere las palabras claves en el momento de insertar el articulo o noticia. Un sistema que elimina las "Stop Words", los adverbios y verbos más usuales y todas las palabras que no quieras que aparezcan en la lista de palabras claves.

AutoKeywords es una clase escrita en VBScript para ASP que para filtrar todas estas palabras el sistema usa varios ficheros en los que están almacenadas casi 3000 palabras entre adverbios y palabras usuales.

Código fuente de la clase:

Mostrar
ASP:
  1. <%
  2. '////////////////////////////
  3. '//// NOMBRE:
  4. '//// VERSIÓN: 1.0
  5. '//// AUTOR: Jairo Blanco
  6. '//// WEB: http://www.jairoblanco.com
  7. '//// FECHA: 02/12/2004
  8. '//// DESCRIPCIÓN:
  9. '////
  10. '//// Clase que devuelve automáticamente las keywords de un texto dado. Para ello
  11. '//// la clase utiliza varios archivos que contienen un diccionario con advervios, preposiciones
  12. '//// y palabras frecuentes que serán las suprimidas a la hora de devolver las keywords.
  13. '//// Si se quire añadir nuestra lista de palabras propias que queremos que no aparezcan en las keywords, sólo tenemos
  14. '//// que añadir un fichero con las palabras una por fila dentro del directorio que indiquemos en la propiedad "FilesVirtualDir".
  15. '////
  16. '//// PROPIEDADES:
  17. '////
  18. '//// FilesVirtualDir: Directorio virtual en el que se encuentran los ficheros de diccionario. Por defecto es "/dictionary/"
  19. '//// Files: Nombre de los ficheros de diccionario separados por ",". Por defecto "usuales.dic,adverbios.a,adverbios.bc,adverbios.de,adverbios.fgh
  20. '//// ,adverbios.ij,adverbios.lm,adverbios.no,adverbios.pq,adverbios.rs,adverbios.t-z
  21. '////
  22. '//// MÉTODOS:
  23. '////
  24. '//// getAutokeyWords(byVal sText, byVal iCharLImit , byVal iKeyWLimit)
  25. '//// Descripción: Función que devuelve automáticamente las keywords de un texto dado
  26. '//// IN:
  27. '//// sTex: Texto del cuál extraer las keywords
  28. '//// iKeyWLimit: Límite de palabras a extraer. Si pasamos 0 devuelve todos las palabras.
  29. '//// OUT: keywords separadas por ", "
  30. '///////////////////////////
  31. Class AutoKeyWords
  32.  
  33.   dim sPathFiles
  34.   dim sArchivos
  35.  
  36.   Public Property Let FilesVirtualDir ( valor )
  37.     sPathFiles = valor
  38.   End Property
  39.  
  40.   Public Property Get FilesVirtualDir
  41.     FilesVirtualDir = sPathFiles
  42.   End Property
  43.  
  44.    Public Property Let Files ( valor )
  45.      sArchivos = valor
  46.   End Property
  47.  
  48.   Public Property Get Files
  49.     Files =  sArchivos
  50.   End Property
  51.  
  52. '////////////////////////////
  53. '//// Autor: Jairo Blanco
  54. '//// Fecha: 02/12/2004
  55. '//// Descripción: Constructor de la clase. Se inicializan las propiedades
  56. '///////////////////////////
  57. Public Sub AutoKeyWords
  58.   'Directorio que contiene las palabras a filtrar
  59.   'Cambiar este directorio por el tuyo si quieres
  60.   sPathFiles="/datos/dictionary/"
  61.   'Ficheros que contiene las palabras que se descartarán.
  62.   sArchivos="usuales.dic,adverbios.a,adverbios.bc,adverbios.de,adverbios.fgh," & _
  63.   "adverbios.ij,adverbios.lm,adverbios.no,adverbios.pq,adverbios.rs,adverbios.t-z"
  64.  
  65. end sub
  66. '////////////////////////////
  67. '//// Autor: Jairo Blanco
  68. '//// Fecha: 02/12/2004
  69. '//// Descripción: Función que devuelve automáticamente las keywords de un texto dado
  70. '//// IN:
  71. '//// sTexT: Texto del cuál extraer las keywords
  72. '//// iKeyWLimit: Límite de palabras a extraer. Si pasamos 0 devuelve todas las palabras.
  73. '//// OUT: keywords separadas por ","
  74. '///////////////////////////
  75. Public function getAutokeyWords(byVal sText, byVal iKeyWLimit)
  76.   'Declaración de variables.
  77.   dim sTblDictionary
  78.   dim i,j,h
  79.   dim sTextofinal
  80.   dim tblArchivos,tblKeywords
  81.   dim sKeyword
  82.  
  83.  
  84.   tblArchivos=split(sArchivos,",")
  85.   'Elimino etiquetas Html
  86.   sText=StripHTML(sText)
  87.   'eliminamos acentos
  88.   sText = EliminarAcentos(sText)
  89.   'ponemos el texto en minusculas
  90.   sText = lcase(sText)
  91.  
  92.   tblKeywords=split(sText," ")
  93.  
  94.   'Recorro todos los archivos de adverbios,usuales etc que hemos cargado desde los ficheros
  95.   ' y voy eliminado aquellas palabras que aparezcan en el texto
  96.   on error resume next
  97.   for h=0 to ubound(tblArchivos)
  98.     stblDictionary=LoadDictArray(sPathFiles & tblArchivos(h))
  99.     for j = 0 to ubound(tblKeywords)
  100.       for i = 0 to ubound(stblDictionary)
  101.         if (lcase(tblKeywords(j))=lcase(stblDictionary(i))) then
  102.         tblKeywords(j)=""
  103.         end if
  104.       next
  105.     next
  106.   next
  107.  
  108.   'Preparar las palabras para devolver
  109.   'for i=0 to ubound(tblKeywords)
  110.   if iKeyWLimit=0 then
  111.     iKeyWLimit=cint(ubound(tblKeywords))
  112.   end if
  113.   i=0
  114.   j=0
  115.   while (j<iKeyWLimit)
  116.     sTextoFinal = trim(sTextoFinal)
  117.     sKeyword = PrepForSpellCheck(tblKeywords(i))
  118.     if (sKeyword)<>"" then
  119.     j=j+1
  120.       'Comprobamos que la palabra no esté ya incluida y se repita
  121.       if (not instr(lcase(sTextofinal),lcase("," & sKeyword ))>0) then
  122.           sTextofinal=sTextoFinal & ", " & sKeyword
  123.       end if
  124.  
  125.     end if
  126.   i=i+1
  127.   wend
  128.   sTextoFinal=right(sTextoFinal,len(sTextoFinal)-1)
  129.   getAutokeyWords=server.HTMLEncode(sTextoFinal)
  130. end function
  131. '////////////////////////////
  132. '//// Autor: Jairo Blanco
  133. '//// Fecha: 02/12/2004
  134. '//// Descripción: Carga las palabras de un fichero en un array
  135. '//// IN: Ruta del fichero a cargar
  136. '//// OUT: Array con las palabras a filtrar
  137. '///////////////////////////
  138. Private function LoadDictArray(byVal cstRelativeDictPath)
  139.     Dim objFSO
  140.     Dim objDictFile
  141.     Dim intDictSize
  142.     Dim intForReading
  143.     Dim objDictStream
  144.  
  145.     Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
  146.     Set objDictFile = objFSO.GetFile(Server.MapPath(cstRelativeDictPath))
  147.     intDictSize = objDictFile.Size
  148.  
  149.     intForReading = 1
  150.     Set objDictStream = objDictFile.OpenAsTextStream(intForReading)
  151.     strDictArray = Split(objDictStream.Read(intDictSize), vbNewLine)
  152.     objDictStream.Close
  153.     Set objDictStream = Nothing
  154.  
  155.     Set objDictFile = Nothing
  156.     Set objFSO = Nothing
  157.   loadDictArray=strDictArray
  158. end function
  159.  
  160. '////////////////////////////
  161. '//// Autor: Jairo Blanco
  162. '//// Fecha: 02/12/2004
  163. '//// Descripción: Comprueba los caracteres permitidos
  164. '//// IN: Palabra a validar
  165. '//// OUT: La misma palabra o vacio si no es válida.
  166. '///////////////////////////
  167. Private function PrepForSpellCheck(strWord)
  168.     Dim strValidChars
  169.     Dim i
  170.     Dim strLetter
  171.  
  172.     strValidChars = "áéíóúabcdefghijklmnñopqrstuvwxyzÁÉÍÓÚABCDEFGHIJKLMNÑOPQRSTUVWXYZ1234567890"
  173.  
  174.     for i = 1 to Len(strWord)
  175.         strLetter = Mid(strWord, i, 1)
  176.         if InStr(strValidChars, strLetter)> 0 then
  177.  
  178.             PrepForSpellCheck = PrepForSpellCheck & strLetter
  179.         elseif i <Len(strWord) then
  180.             PrepForSpellCheck = ""
  181.             exit for
  182.         end if
  183.     next
  184. end function
  185.  
  186. '////////////////////////////
  187. '//// Autor: Fernando Blazquez
  188. '//// Fecha: 03/07/2007
  189. '//// Descripción: Elimina los acentos
  190. '///////////////////////////
  191. Private Function EliminarAcentos(texto)
  192.   dim i, s1, s2
  193.   s1 = "áàèéíïóòúü"
  194.   s2 = "aaeeiioouu"
  195.   if len(texto) <> 0 then
  196.     For i = 1 to Len(s1)
  197.       texto = replace(texto,mid(s1,i,1),mid(s2,i,1))
  198.   next
  199. end if
  200.   EliminarAcentos = texto
  201. End Function
  202.  
  203. '////////////////////////////
  204. '//// Autor: Jairo Blanco
  205. '//// Fecha: 02/12/2004
  206. '//// Descripción:  Elimina etiquetas HTML
  207. '//// IN: Cadena en la que eliminar etiquetas HTML
  208. '//// OUT: Cadena libre de código HTML
  209. '///////////////////////////
  210. Private Function StripHTML(byVal string)
  211.   set Reg = new RegExp
  212.   Reg.pattern = "[<][^>]*[>]"
  213.   Reg.IgnoreCase = true
  214.   Reg.Global = true
  215.   stripHTML = Reg.Replace(string,"")
  216.   StripHTML = Trim(string)
  217. End Function
  218.  
  219. End Class
  220. %>

Descargar:

Download Image autokeyword_v1.0.zip Descargas: 334 en total

Instalación

  • Descargar y descomprimir AutoKeywords.
  • Coloca la carpeta "dictionary" y el fichero que contiene la clase "autokeywords-cls.asp" dónde quieras en tu servidor web.

Utilización

  • Una vez hayas colocado los ficheros en el servidor, sólo hay que hacer un "include" de la clase y llamar al método getAutokeyWords.

Ejemplo:

ASP:
  1. <%
  2. 'Hacemos la inclusión del archivo que contiene la clase
  3. %>
  4. <!--#include virtual="/functions/AutokeyWords-cls.asp"-->
  5. <%
  6.     Dim objAutoKw
  7.     Dim noticia
  8.    
  9.     noticia="En la actualidad gran número de motores de busqueda ignoran la meta etiqueta KEYWORDS pero los que no lo hacen la lectura de estas etiquetas sirve para reforzar las palabras clave incluidas en la meta etiqueta DESCRIPTION y en el cuerpo de la pagina dentro de la etiqueta BODY"
  10.   'Instanciamos el objeto
  11.   set objAutoKw=new AutoKeyWords
  12.   'Asignamos el directorio virtual en el que hemos colocado los ficheros.
  13.   'Si no asignamos nada a esta propiedad cogerá el directorio "/dictionary/" por defecto
  14.   objAutoKw.FilesVirtualDir="/midirectorio/"
  15.   'Ficheros que cargará para realizar el filtrado de keywords.
  16.   'Podemos añadir más ficheros añadiendolos separados por ","
  17.   objAutoKw.Files="usuales.dic,adverbios.a,adverbios.bc,adverbios.de,adverbios.fgh," & _
  18.   "adverbios.ij,adverbios.lm,adverbios.no,adverbios.pq,adverbios.rs,adverbios.t-z"
  19.   'Llamamos al método que devuelve las keywords filtradas separadas por ", " pasandole el texto a filtrar y el número de keywords a devolver.
  20.   'Si queremos que devuelva todas, pasaremos el valor "0".
  21.   response.write(objAutoKw.getAutokeyWords(noticia, 0))
  22.   'Liberamos recursos
  23.   set objAutoKw = nothing
  24. %>

1 Estrella2 Estrellas3 Estrellas4 Estrellas5 Estrellas (No hay votos)
Loading ... Loading ...
Imprimir
del.icio.us:Generar palabras claves (keywords) automáticamente digg:Generar palabras claves (keywords) automáticamente furl:Generar palabras claves (keywords) automáticamente Y!:Generar palabras claves (keywords) automáticamente magnolia:Generar palabras claves (keywords) automáticamente

5 Respuestas para “Generar palabras claves (keywords) automáticamente”

  1. yeclense Dice:

    Justo lo que estaba buscando. Gracias de nuevo!

  2. Fran Martin Dice:

    Jairo, esto habría que hacerlo para todas las noticias o simplemente con incluirlo en el top, me cogería para todas. que burro soy!!!

  3. jairo Dice:

    Hola Fran, eso depende de la técnica de cada uno. Hay gente que preferirá llamar a la función justo antes de mostrar cada noticia pasandole a la función la descripción+titulo de la noticia. Otros por el contrario tendrá un campo en la base de datos llamado “keywords” en el que almacenará esas keywords extraidas al llamar a la función justo antes de añadir una nueva noticia.

  4. jairo Dice:

    Gracias a Fernando por las correciones en el código.

  5. isa Dice:

    una función muy util… pero no coje las palabras acentuadas. Probé comentando la llamada a la función EliminaAcentos, pero nada… no es que quiera incluir en las palabras clave palabras con acentos (que también…), me conformaria con que las incluya sin acentos, pero no se por qué se las salta… alguna solución? Gracias

Dejar un comentario

XHTML: Puedes usar estas etiquetas: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>