Los extractos de búsqueda chinos parecen rotos

Cuando intento buscar en chino en mi foro, veo que los resultados de búsqueda devuelven frases fragmentadas, faltan los signos de puntuación, hay espacios en blanco inesperados entre las palabras y algunas palabras desaparecen.

Por ejemplo, intenté buscar 管理员. La frase original es:

管理人员可见的分类。只有管理员和版主才能阅览主题

Pero lo que veo en los resultados de búsqueda se parece a esto:

Como pueden ver, 可见的 falta, también falta el punto , lo que rompe la frase. Además, 只有, y 才能 también faltan. Y hay espacios en blanco inesperados en medio.

¿Alguien puede ayudarme con este problema? Gracias

2 Me gusta

Parece que esos caracteres faltantes se consideran palabras vacías en el idioma chino

(byebug) data = CppjiebaRb.segment(search_data, mode: mode)
["管理人员", "可见", "的", "分类", "。", "只有", "管理员", "和", "版主", "才能", "阅览", "主题"]
(byebug) CppjiebaRb.filter_stop_word(data)
["管理人员", "分类", "管理员", "版主", "阅览", "主题"]
3 Me gusta

Espera, ¿entonces el error aquí es que el “resumen” en el resultado parece extraño? ¿No es que haya un problema funcional real con la búsqueda?

Sí, la búsqueda sigue funcionando, pero el fragmento que se muestra no es ideal. Para el idioma chino, la búsqueda se maneja de manera un poco diferente. En lugar de ignorar las palabras vacías durante la consulta de búsqueda en sí, las excluimos por completo de los datos de búsqueda.

3 Me gusta

Gracias por investigar esto.

Esto no es una palabra vacía en chino; es un adjetivo que significa “visible”.

¿Es posible solucionar este problema (incluyendo todo en los resultados de búsqueda)? ¿O existe alguna solución alternativa?

Gracias.

1 me gusta

Las palabras vacías son términos muy comunes que perjudican el rendimiento de la búsqueda.

Por ejemplo, “and” (y) es una palabra vacía en inglés.

Es posible solucionar esto, aunque llevará unos meses implementarlo. Mientras tanto, si necesitas una solución rápida, puedes recurrir al Marketplace.

Etiquetado como pr-welcome.

2 Me gusta

Las palabras vacías se determinan utilizando GitHub - yanyiwu/cppjieba: "结巴"中文分词的C++版本 · GitHub. Con los cambios recientes en la forma en que se muestran los fragmentos de búsqueda, deberíamos simplemente eliminar la siguiente línea, ya que interfiere con los datos reales de búsqueda.

De todos modos, nuestro soporte de búsqueda para el chino no es excelente, pero existen extensiones de PostgreSQL que podríamos considerar para poder soportar adecuadamente idiomas que no tienen soporte nativo. ¿Quizás https://pgroonga.github.io/?

5 Me gusta

¡Gracias! Déjame probar esto y ver cómo va.

@tgxworld No estoy seguro de si lo entendí correctamente, pgroonga no admite chino ni japonés. En https://pgroonga.github.io/,

PostgreSQL admite la búsqueda de texto completo en idiomas que solo usan letras y dígitos. Esto significa que PostgreSQL no admite la búsqueda de texto completo en japonés, chino, etc. ¡Puedes utilizar la función de búsqueda de texto completo ultrarrápida para todos los idiomas instalando PGroonga en tu PostgreSQL!

@tgxworld Creé un PR según tu sugerencia FIX: keep chinese stopwords on search by t0t07 · Pull Request #11530 · discourse/discourse · GitHub

El sentido es exactamente el opuesto. PostgreSQL normal no admite chino ni japonés. PGroonga añade soporte para esos idiomas.

3 Me gusta

Por cierto, @riking, solo para confirmar, actualmente Discourse implementa la búsqueda de texto completo utilizando las funciones integradas de PostgreSQL, como se muestra en discourse/lib/search.rb at 1cf057fb1c4e168ce441ddde918636725abeb668 · discourse/discourse · GitHub

¿Es correcto?

1 me gusta

Perdona por no ser más específico al principio. Si realmente queremos solucionar esto por ahora, necesitamos asegurarnos de no eliminar las palabras vacías para el chino en los datos de búsqueda, al mismo tiempo que garantizamos que las palabras vacías sigan siendo eliminadas cuando se usan como consulta de búsqueda.

1 me gusta

@tgxworld No entiendo la diferencia entre los datos de búsqueda y la consulta de búsqueda. ¿Podrías proporcionar más detalles? Gracias

Si añadimos palabras vacías al índice, este se infla y el rendimiento de la búsqueda se ve afectado negativamente.

Hay dos columnas que almacenamos en la tabla PostSearchData: #search_data se utiliza al realizar consultas con términos de búsqueda. #raw_data es lo que usamos al mostrar el fragmento de búsqueda. La solución aquí debería ser que las palabras vacías en chino no se eliminen de #raw_data, aunque sí se sigan eliminando de #search_data.

¿Hay algún avance con este error?

Pensé que había realizado algunos cambios aquí:

¿Tu configuración regional está establecida en zh_TW, zh_CN o ja? Si no es así, ¿está search_tokenize_chinese_japanese_korean configurado en true?

Tenemos una solución alternativa aquí:

2 Me gusta