Este documento presenta una introducción a los comandos básicos de línea de comandos como cat, grep y sed, y cómo se pueden combinar para extraer y filtrar información de archivos de texto. También discute comandos más avanzados como wget y curl que son útiles para acceder y navegar sitios web, y cómo se pueden encadenar estos comandos para realizar tareas como extraer enlaces de sitemaps.
El uso de las tic en la vida continúa , ambiente positivo y negativo.
SEO desde la línea de comandos
1. From Shell to SEO and beyond
Desde la línea de comandos
2. Ya sea porque no hay otra manera, o porque es la más eficaz,
si trabajas con big data, el terminal aprenderás!
La línea de comandos
3. 01 Los básicos
Hay cuatro o cinco comandos que hacen funcionar el mundo,
y puede que no sea coña…
Ya sea porque no hay otra manera, o porque es la más eficaz,
si trabajas con big data, el terminal aprenderás!
La línea de comandos
4. Cuatro o cinco comandos son habitualmente utilizados
01 Los básicos
grep
sed
cat
5. cat
grep
sed
Cuatro o cinco comandos son habitualmente utilizados
01 Los básicos
Ver
el contenido
de un
archivo
7. Cuatro o cinco comandos son habitualmente utilizados
sed
Sustituir
patrones en
el contenido
de un
archivo
01 Los básicos
grep
Filtrar
usando
regex el
contenido de
un archivo
cat
Ver
el contenido
de un
archivo
8. 01 cat
cat ejemploFicheroTexto.txt
<?xml version="1.0" encoding="utf-8" ?><transcript><text start="0" dur="0.5"></text><text start="0.5"
dur="2.86">[MÚSICA ELECTRÓNICA]</text>
<text start="3.36" dur="7.21"></text><text start="10.57" dur="2.37">JOHN MUELLER: Bienvenidos todos al
próximo episodio</text><text start="12.94" dur="3.48">de &quot;Search Off the Record&quot;, un
podcast que estamos probando.</text><text start="16.42" dur="2.52">Nuestro plan es hablar un poco sobre lo
que</text><text start="18.94" dur="2.55">sucede en Google detrás de escena</text><text start="21.49"
dur="2.77">y tal vez divertirnos un poco en el camino.</text><text start="24.26" dur="2.45">Mi nombre es
John Mueller, un promotor de búsqueda</text><text start="26.71" dur="3.97">en el equipo de relaciones de
búsqueda aquí en Google en Suiza.</text><text start="30.68" dur="5">Y me acompañan Martin y Gary, que
también están en el equipo.</text><text start="35.68" dur="0.668">MARTÍN: Hola.</text><text start="36.348"
dur="1.042">
JOHN MUELLER: Hola, Martín.</text><text start="37.39" dur="1.08">Hola, Gary.</text><text start="38.47"
dur="1.02">GARY: [NO EN INGLÉS]</text>
<text start="39.49" dur="1.125">JOHN MUELLER: Buenos días.</text><text start="40.615" dur="1.765">Así
que hemos hecho una serie de episodios ahora.</text><text start="42.38" dur="2.45">Y creo que poco a poco
le estamos cogiendo el truco. Sin embargo, se</text><text start="44.83" dur="2.91">siente un poco nuevo y
emocionante</text><text start="47.74" dur="2.722">cada vez, así que eso es genial. ¿</text>
9. <?xml version="1.0" encoding="utf-8" ?><transcript>
<text start="0" dur="0.5"></text>
<text start="0.5" dur="2.86">MÚSICA ELECTRÓNICA</text>
<text start="3.36" dur="7.21"></text>
<text start="10.57" dur="2.37">JOHN MUELLER: Bienvenidos todos al próximo episodio</text>
<text start="12.94" dur="3.48">de &quot;Search Off the Record&quot;, un podcast que estamos
probando.</text>
<text start="16.42" dur="2.52">Nuestro plan es hablar un poco sobre lo que</text>
<text start="18.94" dur="2.55">sucede en Google detrás de escena</text>
<text start="21.49" dur="2.77">y tal vez divertirnos un poco en el camino.</text>
<text start="24.26" dur="2.45">Mi nombre es John Mueller, un promotor de búsqueda</text>
a
<text start="30.68" dur="5">Y me acompañan Martin y Gary, que también están en el equipo</text>
<text start="35.68" dur="0.668">MARTÍN: Hola.</text>
<text start="36.348" dur="1.042">
JOHN MUELLER: Hola, Martín.</text>
<text start="37.39" dur="1.08">Hola, Gary.</text>
<text start==""38.47" dur="1.02">GARY: [NO EN INGLÉS]</text>
<?xml version="1.0" encoding="utf-8" ?><transcript>
<text start="0" dur="0.5"></text>
<text start="0.5" dur="2.86">MÚSICA ELECTRÓNICA</text>
<text start="3.36" dur="7.21"></text>
<text start="10.57" dur="2.37">JOHN MUELLER: Bienvenidos todos al próximo episodio</text>
<text start="12.94" dur="3.48">de &quot;Search Off the Record&quot;, un podcast que estamos probando.</text>
<text start="16.42" dur="2.52">Nuestro plan es hablar un poco sobre lo que</text>
<text start="18.94" dur="2.55">sucede en Google detrás de escena</text>
<text start="21.49" dur="2.77">y tal vez divertirnos un poco en el camino.</text>
<text start="24.26" dur="2.45">Mi nombre es John Mueller, un promotor de búsqueda</text>
a
<text start="30.68" dur="5">Y me acompañan Martin y Gary, que también están en el equipo</text>
<text start="35.68" dur="0.668">MARTÍN: Hola.</text>
<text start="36.348" dur="1.042">
JOHN MUELLER: Hola, Martín.</text>
<text start="37.39" dur="1.08">Hola, Gary.</text>
<text start==""38.47" dur="1.02">GARY: [NO EN INGLÉS]</text>
01 cat + sed
cat ejemploFicheroTexto.txt |sed 's/<text star/n<text star/g'
10. 02 Los imprescindibles
Su uso básico es “sencillo”, pero son comandos con
muchísimas opciones.
También hay otros comandos que son muy versátiles,
sobretodo para SEOs
La línea de comandos
11. Su uso básico es “sencillo”, pero son comandos con muchísimas opciones. No te
das cuenta de su valor hasta que los usas de manera recurrente.
02 Los imprescindibles
wget
xargs
curl
14. Navaja Suiza
Vale para
muchas
cosas.. OjO
puede ser
catastrófico
El mundo no funcionaría sin ellos.
02 Los imprescindibles
wget
Navega
accede a
una URL
Navega
accede a
una URL
curl xargs
25. 02 wget + grep + xargs + while
177.261.544
URLs
Ni nuestro fiel Screaming Frog
puede con ello
wget -q https://www.booking.com/robots.txt -O - | grep 'Sitemap'|sed 's/Sitemap: //g'|xargs -I{} wget -q -
{} -O - | grep -Eo "https?://[^<]+.*xml.gz" |while read filas; do wget -q $filas -O -|zcat | grep -Eo
"https?://[^<]+">> URLsBooking.txt;done
12 GB
txt de URLs
¿Cómo lo abrirías?
26. 03 Las fuentes de datos
Hay una gran cantidad de fuentes de datos que podemos
usar para muy diversas tareas. Os dejo algunas que creo
útiles para cualquier SEO
No hace falta saber programar, ni instalar pesadas librerías…
Python está sobrevalorado
La línea de comandos
27. cat KwsInicial.csv
camisetas básicas de manga corta
iphone
iphone 13
vaqueros de corte recto para mujer
motorola edge 20 pro
nokia x20
vivo x60 pro+
realme gt 5g
asus rog phone 5
lenovo legion phone duel 2
zte axon 30 ultra
tcl 20 pro 5g
black shark 4 pro
redmi note 10 pro
vestidos casuales de verano
03 Las fuentes de datos
Datos de APIs
29. cat KwsInicial.csv|
xargs -I{} wget -q
'https://db2.keywordsur.fr/keyword_surf
er_keywords?country=ES&keywords=[%22{}%
22]' --output-document - |
jq>>outTextFile.txt
03 Las fuentes de datos
Datos de APIs → Keywordsur
30. cat KwsInicial.csv |sed 's/ /+/g'|while read
palabra;do sqlCH "select kw,vol as
Volume,arrayJoin(rel).1 RelatedKW,arrayJoin(rel).2
VolumeRelatedKw from (select
kw,vol,arrayMap(x->(x.1,x.4),todo.2.5) as rel from
(select arrayJoin(arrayZip(keys,values)) as todo,
todo.1 as kw,todo.2.4 vol
,arrayZip(arrayMap(x->x.1,todo.2.5)
,arrayMap(x->x.3,todo.2.5)) as resto from ( select
arrayMap(x -> x.1, JSONExtractKeysAndValues(html,
'String')) as keys, arrayMap(x -> x.2,
JSONExtractKeysAndValues(html,
'Tuple(Array(UInt64), Float64, Float64,
UInt64,Array(Tuple(String,UInt64,UInt64,Float64)))'
)) as values FROM
url(concat('http://db2.keywordsur.fr/keyword_surfer
_keywords?country=ES&keywords=[%22',replaceRegexpAl
l(normalizeUTF8NFD(lowerUTF8('$palabra')), 'pM',
''),'%22]'), JSONAsString, 'html String')))) order
by Volume desc,VolumeRelatedKw desc FORMAT
Pretty";done
03 Las fuentes de datos
Datos de APIs → Keywordsur
34. cat KwsInicial|sed 's/ /+/g'|xargs -P11
-I{} curl -s -w "n"
"https://completion.amazon.co.uk/api/2017/su
ggestions?prefix={}&suffix=&session-id=260-6
261272-2261010&customer-id=A2HLNXM8V9BK5Z&re
quest-id=65EXKVSV12216V211E18&page-type=Gate
way&lop=es_ES&site-variant=mobile&client-inf
o =
amazon-search-ui&mid=A1RKKUPIHCS9HS&alias=ap
s&event=onLoad&limit=141&suggestion-type=KEY
WORD&suggestion-type=WIDGET&_=1589523257903"
|grep -e '^{"alias"'|sed -E
's/"shuffled":false}(.*)?$/"shuffled":false
}/g'
's/"shuffled":false}(.*)?$
/"s
huffled":false}/g'
{"alias":"aps","prefix":
"iphone 13","suffix":"","suggestions":[{"suggType":"KeywordSuggestion","type":
"KEYWORD","value":"iphone 13"
,"refTag":"nb_sb_ss_ts-doa-p_1_9","candidateSources":"local","strategyId":"ts-doa-p","strategyApiTy
pe":"RANK","prior":0.0,"ghost":false,"help":false},{"suggType":"KeywordSuggestion","type":
"KEYWORD","value":"iphone 13 pro max"
,"refTag":"nb_sb_ss_ts-doa-p_2_9","candidateSources":"local","strategyId":"ts-doa-p","strategyApiTy
pe":"RANK","prior":0.0,"ghost":false,"help":false},{"suggType":"KeywordSuggestion","type":
"KEYWORD","value":"iphone 13 pro"
,"refTag":"nb_sb_ss_ts-doa-p_3_9","candidateSources":"local","strategyId":"ts-doa-p","strategyApiTy
pe":"RANK","prior":0.0,"ghost":false,"help":false},{"suggType":"KeywordSuggestion","type":
"KEYWORD","value":"iphone 13 mini"
,"refTag":"nb_sb_ss_ts-doa-p_4_9","candidateSources":"local","strategyId":"ts-doa-p","strategyApiTy
pe":"RANK","prior":0.0,"ghost":false,"help":false},{"suggType":"KeywordSuggestion","type":
"KEYWORD","value":"iphone 13 reacondicionado"
,"refTag":"nb_sb_ss_ts-doa-p_5_9","candidateSources":"local","strategyId":"ts-doa-p","strategyApiTy
pe":"RANK","prior":0.0,"ghost":false,"help":false},{"suggType":"KeywordSuggestion","type":
"KEYWORD","value":"iphone 13 case"
,"refTag":"nb_sb_ss_ts-doa-p_6_9","candidateSources":"local","strategyId":"ts-doa-p","strategyApiTy
pe":"RANK","prior":0.0,"ghost":false,"help":false},{"suggType":"KeywordSuggestion","type":
"KEYWORD","value":"iphone 13 pro max 256gb"
,"refTag":"nb_sb_ss_ts-doa-p_7_9","candidateSources":"local","strategyId":"ts-doa-p","strategyApiTy
pe":"RANK","prior":0.0,"ghost":false,"help":false},{"suggType":"KeywordSuggestion","type":
"KEYWORD","value":"iphone 13 mini reacondicionado"
,"refTag":"nb_sb_ss_ts-doa-p_8_9","candidateSources":"local","strategyId":"ts-doa-p","strategyApiTy
pe":"RANK","prior":0.0,"ghost":false,"help":false},{"suggType":"KeywordSuggestion","type":
"KEYWORD","value":"iphone 13 pro case"
,"refTag":"nb_sb_ss_ts-doa-p_9_9","candidateSources":"local","strategyId":"ts-doa-p","strategyApiTy
pe":"RANK","prior":0.0,"ghost":false,"help":false},{"suggType":"KeywordSuggestion","type":
"KEYWORD","value":"iphone 13 256gb"
https://completion.amazon.co.uk/api/2017/suggestions?prefix=iphone+13&suffix=&session-id…
03 Las fuentes de datos
Datos de APIs → Amazon
35. KWs iniciales
"kw","Volume","RelatedKW","VolumeRelatedKw"
"iphone 13",673000,"iphone 13 precio",22200
"iphone 13",673000,"iphone 13 precios",22200
"iphone 13",673000,"iphone 13: precio",22200
"iphone 13",673000,"precio iphone 13",14800
"iphone 13",673000,"apple iphone 13",12100
"iphone 13",673000,"iphone 13 apple",3600
"iphone 13",673000,"oferta iphone 13",2400
"iphone 13",673000,"precio del iphone 13",1900
"iphone 13",673000,"el iphone 13",880
"iphone 13",673000,"iphone trece",480
"kw","Volume","RelatedKW","VolumeRelatedKw"
"iphone",246000,"iphone iphone",246000
Relacionadas
Amazon
En paralelo
Volumen de
búsqueda
03 Las fuentes de datos
Datos de APIs
xargs -P100 -I{}
36. Para los más vagos o los menos atrevidos, tranquilos,
aquí dejo estos ejemplos, además, ya formateados en
Google Sheets :)
Datos de las APIs en Sheets
https://docs.google.com/spreadsheets/d/1Lsw0flyKa6gX0O-8Stnzi8MJcYrLfUG-CZytKT6QmJc/edit#gid=1056179876
Keyword Surfer
● Kws relacionadas
● Volumen de búsqueda
Authoritas Amazon
● Kws relacionadas
● Alta disponibilidad
● Datos de dominios
● ¿Actualizada?
37. Existen multitud de programas y scripts que se pueden
ejecutar desde el terminal.
Además de comandos de Linux
38. Existen multitud de programas y scripts que se pueden
ejecutar desde el terminal.
Además de comandos de Linux
04 Caso práctico
Usaremos yt-dlp para crear un buscador de
contenido dentro de una lista de vídeos
39. 04 Caso práctico
yt-dlp hace casi cualquier cosa con los vídeos de YouTube
Obtenemos el id de la lista de reproducción
40. 04 URL + transcripción de un vídeo
yt-dlp --flat-playlist
PLKoqnv2vTMUMxMs2PdBlDULqybdlPZxrk -j | jq
-r .url>>SORVideos.txt
Obtenemos la lista de vídeos
45. https://www.youtube.com/watch?v=D3JKwXiO6B4
https://www.youtube.com/watch?v=CSanSWZV_ik
https://www.youtube.com/watch?v=PUbNfPJRCsY
https://www.youtube.com/watch?v=RZAtINoMVJE
https://www.youtube.com/watch?v=MGS9Y42bcO0
https://www.youtube.com/watch?v=Egx9ymxcXnw
https://www.youtube.com/watch?v=MRtua44JqqA
…
{ "openai.com": {
"potentialVisibilityScoreInc": 0,
"searchVolume": 4400,
"cpc": 16,
"universalRank": 1,
"visibilityIndex": 1485.97998046875,
"kwResultTypes": {
"related_search": 8,
"location": 1,
"people_also_ask": 4,
"video": 3,
"knowledge_graph": 1,
"organic": 98},
"userIntent": {
"informational": 33,
"research": 33,
"transactional": 33 },
"fullUrl": "openai.com/research/whisper",
"domain": "openai.com",
"keyword": "whisper",
"resultType": "organic",
"visibilityIndexShare": 0.4575653271691231,
"universalRankDeltas": 0
}
yt-dlp
--no-abort-on-error
--write-auto-sub
--sub-lang es
--sub-format srv1
--write-description
--skip-download
-o ./"%(id)s---%(title)s"
https://www.youtube.com/watch?v=AyeD6Y_fLdk
<?xml version="1.0" encoding="utf-8" ?><transcript><text start="3.06"
dur="6.949">[Música]</text><text start="10.16" dur="4.96">hola y
bienvenidos a otro episodio de</text><text start="13.019"
dur="3.501">búsqueda del registro, un podcast que</text><text start="15.12"
dur="3.84">les llega del equipo de búsqueda de Google en el que
se</text><text start="16.52" dur="4.599">habla de todo lo relacionado con la
búsqueda y se</text><text start="18.96" dur="4.38">divierten en el
proceso. Me llamo Martin</text><text start="21.119" dur="4.08">y hoy me
acompañan John y Gary</text><text start="23.34" dur="3.42">de el equipo
de relaciones de búsqueda del que</text><text start="25.199"
dur="3.84">también formo parte</text><text start="26.76" dur="4.98">también
gracias a todos los que nos escuchan,</text><text start="29.039"
dur="4.501">acabamos de pasar nuestros 2 millones de</text><text
start="31.74" dur="3.36">descargas marcadas con este podcast
y</text><text start="33.54" dur="3.9">estamos muy entusiasmados con eso
y</text><text start="35.1" dur="4.74">gracias a todos por su</text><text
start="37.44" dur="4.2">atención continua y todos los comentarios. que
estamos</text><text start="39.84" dur="4.62">recibiendo para nuestro
podcast, esto ha</text><text start="41.64" dur="5.52">sido muy apreciado,
está bien,</text><text start="44.46" dur="5.939">hablando de comentarios
hoy, me gustaría</text><text start="47.16" dur="6.899">hablar con ustedes,
dos personas maravillosas aquí</text><text start="50.399" dur="6.18">en
esta configuración de grabación, Gary y John,</text>
cat AyeD6Y_fLd…………srv1
04 Transcripción de un vídeo
* Debe ir todo en una línea
49. <?xml version="1.0" encoding="utf-8" ?><transcript>
<text start="0" dur="0.5"></text>
<text start="0.5" dur="2.86">MÚSICA ELECTRÓNICA</text>
<text start="3.36" dur="7.21"></text>
<text start="10.57" dur="2.37">JOHN MUELLER: Bienvenidos todos al próximo episodio</text>
<text start="12.94" dur="3.48">de &quot;Search Off the Record&quot;, un podcast que estamos
probando.</text>
<text start="16.42" dur="2.52">Nuestro plan es hablar un poco sobre lo que</text>
<text start="18.94" dur="2.55">sucede en Google detrás de escena</text>
<text start="21.49" dur="2.77">y tal vez divertirnos un poco en el camino.</text>
<text start="24.26" dur="2.45">Mi nombre es John Mueller, un promotor de búsqueda</text>
a
<text start="30.68" dur="5">Y me acompañan Martin y Gary, que también están en el equipo</text>
<text start="35.68" dur="0.668">MARTÍN: Hola.</text>
<text start="36.348" dur="1.042">
JOHN MUELLER: Hola, Martín.</text>
<text start="37.39" dur="1.08">Hola, Gary.</text>
<text start==""38.47" dur="1.02">GARY: [NO EN INGLÉS]</text>
#!/usr/bin/python3
import sys
import json
from sentence_transformers import SentenceTransformer
model = SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2')
for size in sys.stdin:
# Collect a batch of inputs to process at once
texts = []
for row in range(0, int(size)):
texts.append(sys.stdin.readline())
# Run the model and obtain vectors
embeddings = model.encode(texts)
# Output the vectors
for vector in embeddings:
print(json.dumps(vector.tolist()))
sys.stdout.flush()
04 Python
embeddings_Bert.py
50. <?xml version="1.0" encoding="utf-8" ?><transcript>
<text start="0" dur="0.5"></text>
<text start="0.5" dur="2.86">MÚSICA ELECTRÓNICA</text>
<text start="3.36" dur="7.21"></text>
<text start="10.57" dur="2.37">JOHN MUELLER: Bienvenidos todos al próximo episodio</text>
<text start="12.94" dur="3.48">de &quot;Search Off the Record&quot;, un podcast que estamos
probando.</text>
<text start="16.42" dur="2.52">Nuestro plan es hablar un poco sobre lo que</text>
<text start="18.94" dur="2.55">sucede en Google detrás de escena</text>
<text start="21.49" dur="2.77">y tal vez divertirnos un poco en el camino.</text>
<text start="24.26" dur="2.45">Mi nombre es John Mueller, un promotor de búsqueda</text>
a
<text start="30.68" dur="5">Y me acompañan Martin y Gary, que también están en el equipo</text>
<text start="35.68" dur="0.668">MARTÍN: Hola.</text>
<text start="36.348" dur="1.042">
JOHN MUELLER: Hola, Martín.</text>
<text start="37.39" dur="1.08">Hola, Gary.</text>
<text start==""38.47" dur="1.02">GARY: [NO EN INGLÉS]</text>
<functions>
<function>
<type>executable_pool</type>
<name>embeddingsBert</name>
<return_type>Array(Float32)</return_type>
<argument>
<type>String</type>
</argument>
<format>TabSeparated</format>
<command>embeddings_Bert.py</command>
<command_read_timeout>1000000</command_read_timeout>
</function>
</functions>
04 Base de Datos (ClickHouse)
configuración de la Base de Datos
51. <?xml version="1.0" encoding="utf-8" ?><transcript>
<text start="0" dur="0.5"></text>
<text start="0.5" dur="2.86">MÚSICA ELECTRÓNICA</text>
<text start="3.36" dur="7.21"></text>
<text start="10.57" dur="2.37">JOHN MUELLER: Bienvenidos todos al próximo episodio</text>
<text start="12.94" dur="3.48">de &quot;Search Off the Record&quot;, un podcast que estamos
probando.</text>
<text start="16.42" dur="2.52">Nuestro plan es hablar un poco sobre lo que</text>
<text start="18.94" dur="2.55">sucede en Google detrás de escena</text>
<text start="21.49" dur="2.77">y tal vez divertirnos un poco en el camino.</text>
<text start="24.26" dur="2.45">Mi nombre es John Mueller, un promotor de búsqueda</text>
a
<text start="30.68" dur="5">Y me acompañan Martin y Gary, que también están en el equipo</text>
<text start="35.68" dur="0.668">MARTÍN: Hola.</text>
<text start="36.348" dur="1.042">
JOHN MUELLER: Hola, Martín.</text>
<text start="37.39" dur="1.08">Hola, Gary.</text>
<text start==""38.47" dur="1.02">GARY: [NO EN INGLÉS]</text>
04 Base de Datos (ClickHouse)
configuración de la Base de Datos
SELECT embeddingsBert('HOLA Seonthebeach!
Estoy creando un buscador de vídeos')
RESULTS
—-------------------------------------------------------------------------------------------------------------------------------------
[0.025904791,-0.008754695,0.0024956395,-0.13338439,0.01864505,0.05029957,-0.009]
—-------------------------------------------------------------------------------------------------------------------------------------
1 row in set. Elapsed: 0.018 sec.
52. <?xml version="1.0" encoding="utf-8" ?><transcript>
<text start="0" dur="0.5"></text>
<text start="0.5" dur="2.86">MÚSICA ELECTRÓNICA</text>
<text start="3.36" dur="7.21"></text>
<text start="10.57" dur="2.37">JOHN MUELLER: Bienvenidos todos al próximo episodio</text>
<text start="12.94" dur="3.48">de &quot;Search Off the Record&quot;, un podcast que estamos
probando.</text>
<text start="16.42" dur="2.52">Nuestro plan es hablar un poco sobre lo que</text>
<text start="18.94" dur="2.55">sucede en Google detrás de escena</text>
<text start="21.49" dur="2.77">y tal vez divertirnos un poco en el camino.</text>
<text start="24.26" dur="2.45">Mi nombre es John Mueller, un promotor de búsqueda</text>
a
<text start="30.68" dur="5">Y me acompañan Martin y Gary, que también están en el equipo</text>
<text start="35.68" dur="0.668">MARTÍN: Hola.</text>
<text start="36.348" dur="1.042">
JOHN MUELLER: Hola, Martín.</text>
<text start="37.39" dur="1.08">Hola, Gary.</text>
<text start==""38.47" dur="1.02">GARY: [NO EN INGLÉS]</text>
CREATE TABLE Trantor.SearchOfftheRecord
(
`fecha` Date,
`fichero` String,
`texto` String,
`linea` String,
`duracion` Float32,
`comienza` Array(String),
`tiempo` String,
`vector` Array(Float32)
)
ENGINE = MergeTree
ORDER BY fecha
SETTINGS index_granularity = 8192
04 Base de Datos (ClickHouse)
configuración de la Base de Datos
54. 04 Búsqueda semántica (ClickHouse)
configuración de la Base de Datos
WITH embeddingsBert('problemas por renderizar javascript') AS txtBusqueda
SELECT
url,
tiempo,
L2SquaredDistance(vector, txtBusqueda) AS distancia,
countSubstrings(texto, ' ') + 1 AS palabras,
texto,
contexto
FROM
(
SELECT
concat('https://www.youtube.com/', fichero, '&t=', replaceRegexpAll(tiempo, '..*', ''), 's') AS url,
texto,
neighbor(texto, 4) AS vecino4,
neighbor(texto, 3) AS vecino3,
neighbor(texto, 2) AS vecino2,
neighbor(texto, 1) AS vecino1,
concat(texto, vecino1, vecino2, vecino3, vecino4) AS contexto,
vector,
tiempo
FROM default.YtGSCVector
)
WHERE palabras > 2
ORDER BY distancia ASC