Cómo tartamudear la segmentación de palabras en Excel usando Python
¿importar?jieba?
'''''?
¿Creado? el?2015-11-23?
'''?
def?word_split(texto):?
"""?
Dividir texto en palabras.
Devuelve una lista de tuplas que contienen palabras
word_list?[]?
windex?=?0?
word_primitive?=?jieba.cut(text,?cut_all?=?True)?
¿para?
si?
word_list.append ((windex,?word))?
windex?
""""?
Crear un índice invertido del documento de texto especificado
{palabra:[ubicaciones]}?
"""?
¿Invertida?{
¿Para?}
para ?
ubicaciones?=?inverted.setdefault(word, [])?
ubicaciones.append(index)?
retorno?invertido
def?inverted_index_add(inverted,?doc_id,?doc_index):?
""""?
Agregar el índice invertido doc_index del documento doc_id al multi- Índice invertido del documento (invertido), utilizando doc_id como identificador del documento.
{palabra:{doc_id:[ubicaciones]}}?
"""?
para?
índices =?invertido .setdefault(palabra, {})?
índices[doc_id] =?ubicaciones
retorno?
""""?
¿buscar?una?palabra?
""""?
word=word.decode('utf-8')?
si la palabra no en invertido:?
retorno?
word_index=invertido[palabra]
retorno?
""""? p>
¿buscar?¿más de?una?palabra?
""""?
wordDic?[]?
doc¿Verdad?[]?
¿para?
si?isinstance(palabra,?str):?
palabra = palabra.decode('utf-8')?
si la palabra no está invertida:?
retorno?
elemento =?invertida[palabra].keys()?
elemento.sort( )?
wordDic.append(elemento)?
números?=?len(wordDic)?
inerIndex =?[0?for?i?in ?rango(números)]?
docIndex?[wordDic[i][0]?for?i?in?rango(números)]?
bandera=?
if,min(docIndex) ==,max(docIndex):?
docRight.append(min(docIndex))?
inerIndex?[inerIndex[i] +1?
Para?i?in?range(números):?
if?
bandera?=?[wordDic[i][inerIndex[ i]]?for?i?in?range(numbers)]?
else:?
minIndex =?min(docIndex)?
minPosition? =?docIndex.index(minIndex)?
inerIndex[minPosition]?
if?
flag=?[wordDic[i][inerIndex[i] ]?
def?search_phrase(invertida,?frase):?
""""?
¿búsqueda?frase?
docRight?=?{}?
temp?=?word_split(frase)?
wordList?=?[temp[i][1]?for?i?in?range (len(temp))]?
docPossible?=?search_words(invertida, lista de palabras)?
¿para?
wordIndex =?[]? p>
indexRight?[]?
¿para?
wordIndex.ap
pend(invertida[palabra][doc])?
números= len(lista de palabras)?
inerIndex =?[0?for?i?in?range(números)]?
¿palabras?[wordIndex[i][0]?for?i?in?range(numbers)]?
¿bandera?
si? p>
si?
indexRight.append(palabras[0])?
inerIndex?[inerIndex[i]+1?
¿para?
¿si?
bandera?=?Falso?
docRight[doc]?=?indexRight?
romper?
if?flag:?
palabras?=?[wordIndex[i][inerIndex[i]]?
else:?
minIndex =?min(palabras)?
minPosition?=?words.index(minIndex)?
inerIndex[minPosition]?
si?
¿flag?=?False?
romper?
if?flag:?
palabras?[wordIndex[i][inerIndex[i]] ?
return docRight
if?__main__':?
doc1?==?""" ?
La desambiguación china es Se refiere para cortar una secuencia de caracteres chinos en una sola palabra.
La desambiguación china se refiere al proceso de cortar una secuencia de caracteres chinos en una sola secuencia de palabras. Sabemos que en el texto se utilizan espacios como. separadores naturales entre palabras, mientras que en la escritura china, los espacios se utilizan como separadores naturales entre palabras.
Solo las palabras, oraciones y párrafos pueden usar simplemente divisiones obvias, solo las palabras no tienen separadores formales, aunque en inglés. también tiene separadores formales
Aunque existe el problema de la demarcación de frases, a nivel de palabras, el chino es más complicado y difícil que el inglés
""""
doc2?=?"""" ?
La existencia de la tecnología de segmentación de palabras chinas se debe a la gramática básica del chino. Su particularidad se refleja específicamente en los siguientes aspectos:?
En comparación con las lenguas latinas representadas por el inglés, que utilizan espacios como separadores naturales, el chino ha heredado la tradición del chino antiguo y "dividió" No hay espacio entre "fen" y "fen", y no hay no hay espacio entre "fen" y "fen".
No hay separación entre palabras. En el chino antiguo, a excepción de las conjunciones y los nombres de personas, lugares, etc., las palabras generalmente son caracteres chinos únicos, por lo que no había separadores en ese momento.
La necesidad del texto.
El chino moderno tiene principalmente dos o varios caracteres, y un carácter ya no equivale a una palabra.
¿En chino, la frontera entre "carácter" y "frase" es borrosa?
Aunque la unidad básica de expresión en el chino moderno es la "palabra", y la mayoría de ellas son palabras de dos o varios caracteres, debido a los diferentes niveles de comprensión de las personas, el límite entre "palabra" y " La frase" no está clara...
Los límites entre palabras y frases son difíciles de distinguir.
Por ejemplo, ya sea que "los que escupen serán castigados" sea una palabra o una frase, diferentes personas tienen diferentes estándares y diferentes personas pueden distinguir entre palabras y frases.
Lo mismo es "sea", "winehouse", etc. Incluso la misma persona puede hacer juicios diferentes. Si el chino realmente necesita escribirse en segmentos de palabras, ¿qué pasará?
Confusión y dificultad.
El método de segmentación de palabras chinas no se limita a aplicaciones chinas. También se utiliza en el procesamiento en inglés, como el reconocimiento de escritura a mano. ¿Los espacios entre palabras no son muy claros?
Palabras chinas. La segmentación puede ayudar a identificar los límites de las palabras en inglés.
""""?
doc3?=?"""" ?
¿Qué hace?
La segmentación de palabras chinas es la base de la minería de texto. Para una pieza de entrada de chino, la segmentación exitosa de palabras chinas puede lograr el efecto de que la computadora identifique automáticamente el significado de la oración.
La tecnología de segmentación de palabras china pertenece a la categoría de tecnología de procesamiento del lenguaje natural. Para una oración, ¿las personas pueden entender qué palabras son palabras y cuáles no a través de su propio conocimiento?
Pero. ¿Cómo puede la computadora también? ¿Puedes entenderlo? Su método de procesamiento es el algoritmo de segmentación de palabras.
¿Influencia?
Para la segmentación de palabras chinas, lo más importante para los motores de búsqueda no es encontrar todos los resultados, porque no tiene sentido encontrar todos los resultados en decenas de miles de millones de páginas web.
Nadie puede leerlos todos. Lo más importante es colocar los resultados más relevantes en la parte superior. Esto también se llama ranking de relevancia. ¿La segmentación de palabras chinas es precisa o no?
Afecta la clasificación de relevancia de los resultados de búsqueda. Desde un análisis cualitativo, ¿los motores de búsqueda tienen diferentes algoritmos de segmentación de palabras y las diferentes bibliotecas de palabras también afectarán los resultados de retorno de la página?
""""
doc4?=? " """ ?
Este método también se llama léxico mecánico, que hace coincidir la cadena de caracteres chinos que se analizarán con las entradas en un diccionario de máquina "suficientemente grande" de acuerdo con una determinada estrategia,?
Si se encuentra una cadena en el diccionario, la coincidencia es exitosa (se reconoce una palabra). Según las diferentes direcciones de escaneo, los métodos subléxicos de coincidencia de cadenas se pueden dividir en coincidencia directa y inversa. De acuerdo con las diferentes longitudes de coincidencia de prioridad, se puede dividir en coincidencia máxima (más larga) y mínima (; más corto) coincidencia ) coincidencia; ¿varios de uso común?
Los métodos de segmentación mecánica son los siguientes:?
Método de coincidencia máxima hacia adelante (de izquierda a derecha)?
Método de coincidencia máxima inversa (desde la derecha); hacia la izquierda); ?
Método de corte mínimo (minimizar el número de palabras recortadas de cada oración; ?
Coincidencia máxima bidireccional (de izquierda a derecha y de derecha a izquierda); ¿Queda para dos exploraciones)?
Los métodos anteriores también se pueden combinar entre sí, por ejemplo, el método de coincidencia máxima directa y el método de coincidencia máxima inversa se pueden combinar para formar un método de coincidencia bidireccional.
Debido a las características de las palabras chinas de un solo carácter, el método de coincidencia mínima directa y el método de coincidencia mínima inversa generalmente rara vez se utilizan. En términos generales, la precisión de la segmentación de la concordancia inversa es ligeramente mayor que la de la concordancia directa.
La comparación directa también presenta menos ambigüedad. Los resultados estadísticos muestran que la tasa de error utiliza únicamente la coincidencia máxima directa, mientras que la tasa de error utiliza la coincidencia mínima inversa.
La tasa máxima de error de coincidencia. Sin embargo, esta precisión está lejos de satisfacer las necesidades reales. Los sistemas de segmentación de palabras realmente utilizados son métodos mecánicos de segmentación de palabras.
Como medio de segmentación preliminar de palabras, también es necesario utilizar otra información del idioma para mejorar aún más la precisión de la segmentación.
Un método consiste en mejorar el método de escaneo, el llamado método de escaneo de características o segmentación de marcas, que prioriza la identificación y segmentación de algunas características obvias en la cadena que se va a analizar.
Al utilizar estas palabras como puntos de interrupción, la cadena original se puede dividir en cadenas más pequeñas y luego ingresar a la segmentación mecánica, lo que reduce la tasa de error de coincidencia. ¿Cuál es la alternativa?
Combina la segmentación de palabras y la anotación de partes del discurso, utiliza información rica sobre las partes del discurso para ayudar en las decisiones de segmentación de palabras y, a su vez, realiza la segmentación de palabras durante el proceso de anotación.
Prueba y ajusta los resultados. Esto mejora enormemente la precisión de la segmentación.
Para el método de segmentación mecánica, se puede establecer un modelo general. Existen artículos académicos especiales sobre este aspecto, que no se discutirán en detalle aquí.
""""?
doc5?=?"""" ?
Formalmente, las palabras son combinaciones estables de palabras, por lo que son adyacentes cuantas más veces. aparecen en contexto, es más probable que formen una palabra.
Por tanto, la frecuencia o probabilidad de palabras adyacentes puede reflejar mejor la credibilidad de las palabras compuestas.
En el corpus, la frecuencia combinada de apariciones adyacentes de palabras individuales se puede calcular calculando la información de aparición mutua. Defina la información de ocurrencia mutua de dos palabras y calcule la probabilidad de que aparezcan dos caracteres chinos adyacentes.
La ocurrencia mutua de información refleja la estrecha relación vinculante entre los caracteres chinos. Cuando el grado de cercanía supera un cierto umbral, se puede considerar que el conjunto de caracteres puede formar una palabra. ¿Este método?
Solo necesita contar la frecuencia de aparición de frases en el corpus y no necesita cortar el diccionario, por lo que también se le llama método de segmentación de palabras sin diccionario o método de extracción estadística de palabras. ¿Pero este método?
También existen ciertas limitaciones. A menudo extraemos algunas frases que aparecen con más frecuencia pero que no son palabras comunes, como "este", "uno de" y "algunos"
. "Mi", "Muchos", etc., la precisión del reconocimiento de palabras comunes es pobre y la sobrecarga de tiempo y espacio es grande. La aplicación práctica del sistema de segmentación estadística de palabras es utilizar un léxico básico (léxico de palabras comunes) para la coincidencia de cadenas y, al mismo tiempo, utilizar métodos estadísticos para identificar algunas palabras nuevas, es decir, combinar estadísticas de frecuencia con cadenas. Combinando coincidencia,?
no solo aprovecha las características rápidas y eficientes de la segmentación de palabras coincidentes, sino que también utiliza las ventajas de la segmentación de palabras sin diccionario combinada con el contexto para identificar nuevas palabras y lograr la desambiguación automática.
El otro tipo se basa en métodos estadísticos de aprendizaje automático. Primero, dada una gran cantidad de texto que ha sido segmentado, ¿utilizar un modelo estadístico de aprendizaje automático para aprender las reglas de segmentación de palabras?
(llamado entrenamiento) para lograr la segmentación de texto desconocido. Sabemos que la capacidad de un solo carácter chino para formar una palabra en chino es diferente. Además, algunos caracteres chinos suelen aparecer como prefijos, mientras que otros caracteres suelen aparecer como sufijos ("人", "性""), combinados con. Con la información sobre si estas dos palabras son palabras cuando se usan juntas, podemos obtener mucho conocimiento relacionado con la segmentación de palabras.
Este método consiste en aprovechar al máximo las reglas chinas de formación de palabras para dividir palabras. La mayor desventaja de este método es que requiere una gran cantidad de segmentación previa.
La mayor desventaja de este método es que requiere una gran cantidad de soporte de corpus presegmentado y los costos de tiempo y espacio del proceso de capacitación son extremadamente altos.
En cuanto a qué algoritmo de segmentación de palabras es más preciso, aún no hay ninguna conclusión. Cualquier sistema de segmentación de palabras maduro no puede depender de un solo algoritmo.
Para conseguirlo es necesario integrar diferentes algoritmos. Por ejemplo, el algoritmo de Halide utiliza un "método complejo" que combina la medicina tradicional china y occidental.
Como una combinación de métodos mecánicos e intelectuales. Para un sistema de procesamiento de textos chino maduro, se necesitan una variedad de algoritmos para manejar el problema de manera integral.
""""?
#?Construir?Índice-invertido?para?documentos?
¿invertido?=?{}?
documentos?=?{'doc1':doc1, doc2':doc2, doc3':doc3, doc4':doc4, doc5':doc5}?
para?doc_id,?text?in? documents.iteritems():?
doc_index?=?inverted_index(texto)?
inverted_index_add(invertido,?doc_id,?doc_index)?
#? ¿Subpalabra"?
result_a_word?=?search_a_word(invertida,?aWord)?
si result_a_word:?
result_a_word_docs?=?result_a_word.keys()?
¿imprimir?"'%s' es?%(aWord)?
para?result_a_word_doc?in?result_a_word_docs:?
result_a_word_index?=?result_a_word[ result_a_word_doc]?
para índice en result_a_word_index:?
¿imprimir?+?'),?
imprimir?"?+?result_a_word_doc ?
¿imprimir?
otro:?
¿imprimir?"
otro:?
¿imprimir?
¿#Buscar?["Chino",?" cortar"]?
¿palabras_resultado?
si palabras_resultado:?
¿imprimir?
¿para?
imprimir?("%s?"?%(palabras[i])),?
imprimir?("%s?"? %(palabras[i])),?
para?result_words_doc?in?result_words:?
imprimir?(result_words_doc?+?' ?') ,?
¿imprimir?
otro:?
¿imprimir?"No?coincide! \r\n"?
#¿Frase de búsqueda?Frase china"?
result_phrase =?search_phrase(invertida,?phrase)?
si?
result_phrase_docs?=?result_phrase.keys()?
¿imprimir?"'%s' aparece?
¿imprimir?"'%s'?
para?result_phrase_doc?in?result_phrase_docs:?
result_phrase_index ?=?result_phrase[result_phrase_doc]?
¿para?
¿imprimir?+?',?
imprimir?"de?"?+? result_phrase_doc?
¿imprimir?
otro:?
¿imprimir?"No?
coincidencias!/r\n".