Estratti di ricerca cinesi appaiono danneggiati

Quando provo a cercare in cinese nel mio forum, vedo che i risultati della ricerca restituiscono frasi spezzate, mancano i segni di punteggiatura e ci sono spazi bianchi inaspettati tra le parole, oltre ad alcune parole mancanti.

Ad esempio, ho cercato 管理员. La frase originale è:

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

Ma ciò che vedo nel risultato della ricerca assomiglia a questo:

Come puoi notare, 可见的 è mancante, manca anche il punto fermo , il che spezza la frase. Inoltre, 只有, e 才能 sono assenti. Inoltre, ci sono spazi bianchi inaspettati tra le parole.

Qualcuno può aiutarmi a risolvere questo problema? Grazie

2 Mi Piace

Sembra che quei caratteri mancanti siano considerati parole vuote nella lingua cinese

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

Aspetta, quindi il bug qui è che il “riepilogo” nel risultato sembra strano? Non che ci sia un vero problema funzionale nella ricerca?

Sì, la ricerca funziona ancora, ma l’estratto visualizzato non è ottimale. Per la lingua cinese, la ricerca viene gestita in modo leggermente diverso. Invece di ignorare le parole vuote durante la query di ricerca stessa, le escludiamo completamente dai dati di ricerca.

3 Mi Piace

Grazie per aver esaminato la questione.

Questa non è una parola vuota in cinese, ma un aggettivo che significa “visibile”.

È possibile risolvere questo problema (inclusi tutti i risultati della ricerca)? Oppure esiste qualche soluzione alternativa?

Grazie.

1 Mi Piace

Le stop word sono parole molto comuni che compromettono le prestazioni della ricerca

“E”, ad esempio, in inglese è una stop word

È possibile risolvere il problema; ci vorranno alcuni mesi per arrivare a una soluzione. Nel frattempo, se hai bisogno di una correzione rapida, consulta Marketplace

Segnato come pr-welcome

2 Mi Piace

Le parole vuote sono determinate utilizzando GitHub - yanyiwu/cppjieba: "结巴"中文分词的C++版本 · GitHub. Con le recenti modifiche alla visualizzazione degli estratti di ricerca, dovremmo semplicemente rimuovere la riga seguente poiché interferisce con i dati di ricerca effettivi.

In ogni caso, il nostro supporto per la ricerca in cinese non è eccellente, ma esistono estensioni PG che potremmo prendere in considerazione per supportare correttamente le lingue che non hanno un supporto nativo. Forse https://pgroonga.github.io/?

5 Mi Piace

Grazie! Proviamo e vediamo come va.

@tgxworld Non sono sicuro di aver capito correttamente: PGroonga non supporta il cinese e il giapponese. In https://pgroonga.github.io/,

PostgreSQL supporta la ricerca full-text solo per lingue che utilizzano esclusivamente lettere dell’alfabeto e cifre. Ciò significa che PostgreSQL non supporta la ricerca full-text per il giapponese, il cinese e così via. Puoi utilizzare la funzione di ricerca full-text ultra veloce per tutte le lingue installando PGroonga nel tuo PostgreSQL!

@tgxworld Ho creato una PR come da tua suggerimento FIX: keep chinese stopwords on search by t0t07 · Pull Request #11530 · discourse/discourse · GitHub

Il senso è esattamente opposto. PostgreSQL normale non supporta il cinese e il giapponese. PGroonga aggiunge il supporto per queste lingue.

3 Mi Piace

A proposito @riking, solo per confermare, attualmente Discourse implementa la ricerca full-text utilizzando le funzioni integrate di PostgreSQL come in discourse/lib/search.rb at 1cf057fb1c4e168ce441ddde918636725abeb668 · discourse/discourse · GitHub

È corretto?

1 Mi Piace

Scusa per non essere stato più specifico all’inizio. Se vogliamo davvero risolvere questo problema per ora, dobbiamo assicurarci di non rimuovere le parole vuote cinesi dai dati di ricerca, mantenendo però che le parole vuote vengano comunque rimosse quando vengono utilizzate come query di ricerca.

1 Mi Piace

@tgxworld Non capisco la differenza tra dati di ricerca e query di ricerca. Puoi fornire maggiori dettagli? Grazie

Se aggiungiamo le parole di stop all’indice, questo si espande eccessivamente e peggiora le prestazioni di ricerca.

Ci sono due colonne che memorizziamo nella tabella PostSearchData: #search_data viene utilizzato durante le query sui termini di ricerca. #raw_data è ciò che usiamo quando mostriamo l’estratto di ricerca. La soluzione qui dovrebbe essere che le parole di arresto cinesi non vengano rimosse da #raw_data, pur continuando a essere rimosse da #search_data.

Ci sono stati progressi su questo bug?

Pensavo di aver apportato alcune modifiche qui:

La tua locale è impostata su zh_TW, zh_CN o ja? Se non è così, è impostato search_tokenize_chinese_japanese_korean su true?

Abbiamo un bypass qui:

2 Mi Piace