Está en la página 1de 19

SISTEMA EXPERTO MDICO

1. Marco Terico
1.1 Introduccin
QU ES UN SISTEMA BASADO EN EL CONOCIMIENTO?
Los sistemas basados en el conocimiento son el resultado de un largo proceso de
investigacin realizado por los cientficos en el rea de la Inteligencia Artificial, cuando, en
los aos setenta, comenzaron a comprender que la capacidad de un programa de ordenador
para resolver problemas no reside en la expresin formal ni en los esquemas lgicos de
inferencia que emplea sino en el conocimiento que posee.
Un experto es alguien que posee unos determinados conocimientos y experiencia en un
campo de la actividad humana y es capaz de aplicarlos con rapidez y eficiencia en la
resolucin de tareas diferentes aunque no le hayan sido encomendadas con anterioridad,
pero que caen dentro de su dominio.
As, un sistema basado en el conocimiento es un cuerpo de programas de ordenador que
intenta imitar e incluso superar en algunas situaciones a un experto humano en un mbito
concreto de su actividad. No pretende, en absoluto, reproducir el pensamiento humano, sino
simplemente la pericia de un profesional competente (tngase en cuenta que para construir
un SBC se suele contar con grandes expertos en la materia que incorporan su conocimiento
al sistema). Esta pretensin es ms sencilla ya que en algunos campos reducidos los expertos
trabajan siguiendo reglas, aunque, generalmente, no sean conscientes de ello. En aquellos
campos en los que no sea necesario aplicar la intuicin ni el sentido comn, los sistemas
basados en el conocimiento han conseguido notables xitos, consiguiendo en ocasiones ser
ms regulares y rpidos que los propios expertos.

HISTORIA DE LOS LENGUAJES BASADOS EN CONOCIMIENTO


Sistemas de primera generacin: Los sistemas basados en el conocimiento desarrollados
hasta hace poco constituyen la cuya caracterstica comn reside en la superficialidad del
conocimiento que se incluye en el mismo. Los ingenieros de conocimiento (desarrolladores
de los sistemas basados en el conocimiento) se limitan a incorporar en los sistemas la
experiencia y criterios de los especialistas sin buscar las razones ltimas en las que se basan.
Sistemas de Segunda Generacin: Actualmente, existen sistemas ms avanzados en la que el
conocimiento se estructura en dos niveles. El primer nivel, de control (se suele aludir a l
como metaconocimiento y las reglas que lo constituyen reciben el nombre de metarreglas),
sirve para determinar la forma de utilizar el segundo nivel que es el que contiene el
conocimiento de los expertos.
LENGUAJES BASADOS EN CONOCIMIENTO
Para el desarrollo de sistemas basados en el conocimiento se han venido utilizando tanto
lenguajes de programacin especficos de la inteligencia artificial (LISP y PROLOG) como de
propsito general (C, PASCAL, etc.).
El lenguaje LISP es uno de los ms utilizados desde los comienzos de la I.A.

1.2 Prolog
QU ES PROLOG?
Prolog , del Frances :Programation en Logique. Es el lenguaje declarativo, quien a partir de
los datos introducidos deduce nuevos hechos y resuelve el problema automticamente.
PROLOG tiene incluido, por tanto, un motor de inferencia que se encarga de realizar
bsquedas en su base de hechos.

HISTORIA
Se trata de un lenguaje de programacin ideado a principios de los aos 70 en la universidad
de Aix-Marseille por los profesores Alain Colmerauer y Phillipe Roussel. Inicialmente se
trataba de un lenguaje totalmente interpretado hasta que, a mediados de los 70, David H.D.
Warren desarroll un compilador capaz de traducir Prolog en un conjunto de instrucciones
de una mquina abstracta denominada Warren Abstract Machine, o abreviadamente, WAM.
Desde entonces Prolog es un lenguaje semi-interpretado.
Prolog se enmarca en el paradigma de los lenguajes lgicos, lo que lo diferencia
enormemente de otros lenguajes ms populares tales como Fortran, Pascal, C, Java.

PROGRAMACIN EN PROLOG
Los programas en Prolog se componen de clusulas de Horn que constituyen reglas del tipo
"modus ponendo ponens", es decir, "Si es verdad el antecedente, entonces es verdad el
consecuente". No obstante, la forma de escribir las clusulas de Horn es al contrario de lo
habitual. Primero se escribe el consecuente y luego el antecedente. El antecedente puede
ser una conjuncin de condiciones que se denomina secuencia de objetivos. Cada objetivo se
separa con una coma y puede considerarse similar a una instruccin o llamada a
procedimiento de los lenguajes imperativos. En Prolog no existen instrucciones de control.
Su ejecucin se basa en dos conceptos: la unificacin y el backtracking.
Gracias a la unificacin, cada objetivo determina un subconjunto de clusulas susceptibles de
ser ejecutadas. Cada una de ellas se denomina punto de eleccin. Prolog selecciona el primer
punto de eleccin y sigue ejecutando el programa hasta determinar si el objetivo es
verdadero o falso.
En caso de ser falso entra en juego el backtracking, que consiste en deshacer todo lo
ejecutado situando el programa en el mismo estado en el que estaba justo antes de llegar al
punto de eleccin. Entonces se toma el siguiente punto de eleccin que estaba pendiente y
se repite de nuevo el proceso. Todos los objetivos terminan su ejecucin bien en xito
("verdadero"), bien en fracaso ("falso").

2. Desarrollo del Sistema Experto


DESCRIPCIN DEL PROBLEMA
Realizar un sistema experto basado en conocimientos mdicos, dicho sistema debe
considerar pacientes, sntomas, enfermedades, medicamentos y mdicos, ingredientes
positivos para la enfermedad del paciente, as como los ingredientes negativos para la cura
de su enfermedad. Tambin considera los platillos donde se encuentran dichos ingredientes
y finalmente el restaurant turstico donde el paciente puede ir a degustar los platillos que le
favorecen a su salud.
El sistema experto es usado como medio para la promocin de ingredientes peruanos que
poseen propiedades curativas. El sistema experto debe responder todo tipo de preguntas al
respecto.

GRAFO

CODIGO FUENTE COMENTADO


enfermedad(neumonia).
enfermedad(tuberculosis).
enfermedad(hepatitisB).
enfermedad(gastritis).
enfermedad(sinusitis).
%-------------------------------------------------------------------% sintoma(X,Y) = X es sintoma de Y, donde Y es enfermedad
%---------------------------------------------------------------% enfermedad: Neumonia
sintoma(fiebre,neumonia).
sintoma(dolorTorxico , neumonia).
sintoma(dolorCabeza , neumonia).
sintoma(escalofrios, neumonia).
sintoma(tos,neumonia).
% enfermedad: Tuberculosis
sintoma(fiebre,tuberculosis).
sintoma(cansancio,tuberculosis).
sintoma(prdidaPeso,tuberculosis).
sintoma(faltaApetito,tuberculosis).
sintoma(tos ,tuberculosis).
sintoma(sudoracion ,tuberculosis).
% enfermedad: Hepatitis B
sintoma(fiebre,hepatitisB).
sintoma(nauseas,hepatitisB).
sintoma(dolorParteAltaAbdomen,hepatitisB).
sintoma(ictericia,hepatitisB).%color amarillo de la piel y el ojo
sintoma(orinaColorOscuro,hepatitisB).
% enfermedad: Gastritis
sintoma(distencionAbdominal,gastritis).
sintoma(nauseas,gastritis).
sintoma(dolorParteAltaAbdomen,gastritis).
sintoma(faltaApetito,gastritis).

sintoma(acidezEstomacal,gastritis).
% enfermedad: Sinusitis
sintoma(fiebre,sinusitis).
sintoma(congestionSecrecionNasal,sinusitis).
sintoma(dolorCabeza,sinusitis).
sintoma(tos,sinusitis).
%-------------------------------------------------------------------% medicamento(X,Y) = X es medicamento de Y
%-------------------------------------------------------------------% enfermedad: Neumonia
medicamento(ibuprofeno ,neumonia).
medicamento(azitromicina,neumonia).
medicamento(claritromicina,neumonia).
medicamento(amoxicilina,neumonia).
medicamento(dextrometorfano,neumonia).
% enfermedad: Tuberculosis
medicamento(ibuprofeno ,tuberculosis).
medicamento(complejoB,tuberculosis).
medicamento(pirazinamida,tuberculosis).
medicamento(ribavirina,tuberculosis).
medicamento(dextrometorfano,tuberculosis).
% enfermedad: Hepatitis B
medicamento(ibuprofeno,hepatitisB).
medicamento(ondansetron,hepatitisB).
medicamento(omeprazol ,hepatitisB).
medicamento(timosina ,hepatitisB).
medicamento(entecavir,hepatitisB).
% enfermedad: Gastritis
medicamento(almax ,gastritis).
medicamento(ondansetron,gastritis).
medicamento(omeprazol ,gastritis).
medicamento(ribavirina_l,gastritis).
medicamento(ridocaina ,gastritis).

% enfermedad: Sinusitis
medicamento(ibuprofeno,sinusitis).
medicamento(ampicilina,sinusitis).
medicamento(clindamicina ,sinusitis).
medicamento(amoxicilina,sinusitis).
medicamento(dextrometorfano,sinusitis).
%--------------------------------------------------------% tiene_sintoma(X,Y) = paciente X tiene sintoma de Y
%--------------------------------------------------------tiene_sintoma(juan,escalofrios).
tiene_sintoma(juan,tos).
tiene_sintoma(pedro,escalofrios).
tiene_sintoma(ana,fiebre).
tiene_sintoma(ana,tos).
tiene_sintoma(maria,ictericia).
tiene_sintoma(maria,vomitos).
tiene_sintoma(maria,cansancio).
tiene_sintoma(carlos,fiebre).
tiene_sintoma(carlos,dolorParteAltaAbdomen).
tiene_sintoma(carlos,nauseas).

% especialidad(X) = X es especialidad
% -------------------------------------------------------------------especialidad(neumologia).
especialidad(hepatologia).
especialidad(otorinolaringologia).
especialidad(gastroenterologia).
especialidad(medicinaGeneral).
%---------------------------------------------------------

% doctor(X) = X es doctor
%--------------------------------------------------------doctor(ramonMendoza).
doctor(luisPerez).
doctor(jennyCornejo).
doctor(cesarHernandez).
doctor(mariluPeralta).
doctor(jaimeParra).
doctor(marcoMollo).
doctor(rosaCasavilca).
% especialista_en(X,Y) = X es especialista en Y(especialidad)
%----------------------------------------------------------------especialista_en( ramonMendoza ,neumologia).
especialista_en( luisPerez ,hepatologia).
especialista_en( jennyCornejo ,otorinolaringologia).
especialista_en( jennyCornejo ,medicinaGeneral).
especialista_en( jennyCornejo ,gastroenterologia).
especialista_en( cesarHernandez ,gastroenterologia).
especialista_en( mariluPeralta ,medicinaGeneral).
especialista_en( jaimeParra ,otorinolaringologia).
especialista_en( marcoMollo ,neumologia).
especialista_en( rosaCasavilca ,medicinaGeneral).
especialista_en( rosaCasavilca, neumologia).
% tratado_en(X,Y) = X(enfermedad) es tratado en Y(especialidad)
%------------------------------------------------------------------tratado_en(neumonia,neumologia).
tratado_en(hepatitisB,hepatologia).
tratado_en(sinusitis,otolaringologia).
tratado_en(gastritis,gastroenterologia).
tratado_en(tuberculosis,medicinaGeneral).
tratado_en(tuberculosis,neumologia).

% hace_bien(X,Y) = ingrediente X propiedad curativa para enfermedad Y


%-------------------------------------------------------------------% enfermedad: Neumonia

hace_bien(verduracocida,neumonia).
hace_bien(papaamarilla,neumonia).
hace_bien(pollohervido,neumonia).
hace_bien(aguacaliente,neumonia).
hace_bien(eucalipto,neumonia).
hace_bien(miel,neumonia).
hace_bien(apio,neumonia).
hace_bien(zapallo,neumonia).
hace_bien(zanahoria,neumonia).

% enfermedad: Gastritis
hace_bien(verduracocida,gastritis).
hace_bien(papaamarilla,gastritis).
hace_bien(pollohervido,gastritis).
hace_bien(aguacaliente,gastritis).
hace_bien(eucalipto,gastritis).
hace_bien(miel,gastritis).
hace_bien(apio,gastritis).
hace_bien(zapallo,gastritis).
hace_bien(zanahoria,gastritis).
hace_bien(mantequilla,gastritis).
hace_bien(leche,gastritis).
% enfermedad: sinusitis
hace_bien(aguacaliente,sinusitis).
hace_bien(eucalipto,sinusitis).
hace_bien(apio,sinusitis).
hace_bien(zapallo,sinusitis).
hace_bien(zanahoria,sinusitis).
hace_bien(mantequilla,sinusitis).
hace_bien(limon,sinusitis).
hace_bien(harinadetrigo,sinusitis).
% enfermedad: tuberculosis
hace_bien(verduracocida,tuberculosis).
hace_bien(papaamarilla,tuberculosis).

hace_bien(pollohervido,tuberculosis).
hace_bien(aguacaliente,tuberculosis).
hace_bien(eucalipto,tuberculosis).
hace_bien(lecheSoya,tuberculosis).
hace_bien(platano,tuberculosis).
hace_bien(zapallo,tuberculosis).
hace_bien(zanahoria,tuberculosis).
hace_bien(limon,tuberculosis).
hace_bien(harinadetrigo,tuberculosis).
hace_bien(mantequilla,tuberculosis).
% enfermedad: hepatitis B
hace_bien(apio,hepatitisB).
hace_bien(zapallo,hepatitisB).
hace_bien(zanahoria,hepatitisB).
hace_bien(limon,hepatitisB).
hace_bien(harinadetrigo,hepatitisB).
hace_bien(mantequilla,hepatitisB).

% hace_mal(X,Y) = ingrediente X propiedad negativa para enfermedad Y


%------------------------------------------------------------------hace_mal(harinadetrigo,neumonia).
hace_mal(mantequilla,neumonia).
hace_mal(leche,neumonia).
hace_mal(leche,tuberculosis).
hace_mal(papaamarilla,hepatitisB).
hace_mal(leche,hepatitisB).
hace_mal(aguacaliente,gastritis).
hace_mal(limon,gastritis).
hace_mal(mantequilla,gastritis).
hace_mal(mantequilla,sinusitis).
hace_mal(leche,sinusitis).

%------------------------------------------------------------------% platillo(P) = P es platillo


%------------------------------------------------------------------platillo(sopaDieta).
platillo(teEucalipto).
platillo(sopadeverduras).
platillo(chapo).
platillo(shambar).
platillo(tortillakiwicha).
platillo(purdepapas).
platillo(pasteldelimon).
platillo(empanada).
%-------------------------------------------------------------------% restaurante(R) = R es restaurante
%---------------------------------------------------------------restaurante(rinconAyacuchano).
restaurante(alCarbon).
restaurante(surChico).
%-------------------------------------------------------------------% buscar_restaurante(P,R) = el platillo P se sirve en el restaurante R
%---------------------------------------------------------------buscar_restaurante(sopaDieta,alCarbon).
buscar_restaurante(teEucalipto,alCarbon).
buscar_restaurante(sopadeverduras,surChico).
buscar_restaurante(chapo,rinconAyacuchano).
buscar_restaurante(shambar,rinconAyacuchano).
buscar_restaurante(tortillakiwicha,rinconAyacuchano).
buscar_restaurante(purdepapas,surChico).
buscar_restaurante(pastellimon,surChico).
buscar_restaurante(empanada,alCarbon).
%------------------------------------------------------------------% ingrediente(X) = X es ingrediente
%------------------------------------------------------------------ingredientePlatillo(papaamarilla).
ingredientePlatillo(pollohervido).

ingredientePlatillo(verduracocida).
ingredientePlatillo(aguacaliente).
ingredientePlatillo(eucalipto).
ingredientePlatillo(miel).
ingredientePlatillo(apio).
ingredientePlatillo(zapallo).
ingredientePlatillo(zanahoria).
ingredientePlatillo(platano).
ingredientePlatillo(lecheSoya).
ingredientePlatillo(trigo).
ingredientePlatillo(arverjasSecas).
ingredientePlatillo(garbanzo).
ingredientePlatillo(kiwicha).
ingredientePlatillo(huevo).
ingredientePlatillo(cebollaPicada).
ingredientePlatillo(leche).
ingredientePlatillo(limon).
ingredientePlatillo(harinadetrigo).
ingredientePlatillo(mantequilla).
ingredientePlatillo(carne).
%------------------------------------------------------------------% ingrediente(X,Y) = X es ingrediente del plato Y
%------------------------------------------------------------------ingrediente(papaamarilla,sopaDieta).
ingrediente(pollohervido,sopaDieta).
ingrediente(verduracocida,sopaDieta).
ingrediente(aguacaliente,teEucalipto).
ingrediente(eucalipto,teEucalipto).
ingrediente(miel,teEucalipto).
ingrediente(apio,sopadeverduras).
ingrediente(zapallo,sopadeverduras).
ingrediente(zanahoria,sopadeverduras).
ingrediente(platano,chapo).
ingrediente(lecheSoya,chapo).

ingrediente(aguacaliente,chapo).
ingrediente(trigo,shambar).
ingrediente(arverjasSecas,shambar).
ingrediente(garbanzo,shambar).
ingrediente(kiwicha,tortillaKiwicha).
ingrediente(huevo,tortillaKiwicha).
ingrediente(cebollaPicada,tortillaKiwicha).
ingrediente(papaamarilla,purdepapas).
ingrediente(leche,purdepapas).
ingrediente(aguacaliente,purdepapas).
ingrediente(limon,pasteldelimon).
ingrediente(harinadetrigo,pasteldelimon).
ingrediente(mantequilla,pasteldelimon).
ingrediente(cebollaPicada,empanada).
ingrediente(mantequilla,empanada).
ingrediente(harinadetrigo,empanada).
ingrediente(carne,empanada).

%===================================================================
%ESPECIFICACION DE REGLAS
%===================================================================

%---------------------------------------------------%paciente X debe tomar la lista de medicamentos P


%---------------------------------------------------debe_tomar_medicamento(X,P):findall(Y,tiene_sintoma(X,Y),L),findall(M,buscar_medicamento(L,M),Z),sinDuplicados(Z,P).
%---------------------------------------------------%elemento X no pertenece a la lista, donde [Y|Ys] es la lista
%Y es la cabeza y Ys es la cola.
%---------------------------------------------------noPertenece(X,[]).
noPertenece(X,[Y|Ys]):-X\=Y,noPertenece(X,Ys).
%---------------------------------------------------%elemento X pertenece a la lista
%---------------------------------------------------pertenece(X,[X|_]).
pertenece(X,[_|T]):- pertenece(X,T).
%---------------------------------------------------%paciente X debe tomar la lista de medicamentos P
%---------------------------------------------------sinDuplicados([],[]).
sinDuplicados([X|Xs],[X|Ys]):-noPertenece(X,Xs),sinDuplicados(Xs,Ys).
sinDuplicados([X|Xs],Ys):- pertenece(X,Xs),sinDuplicados(Xs,Ys).
%------------------------------------------------------------%dado una lista de sintomas se indicar que medicamentos tomar
%------------------------------------------------------------buscar_medicamento(X,M):-sintoma(X, E), medicamento(M,E).
buscar_medicamento([X|Xs],M
buscar_medicamento(Xs,M).

:-

buscar_medicamento(X,M)

%------------------------------------------------------------%el metodo buscar nos permite encontrar la enfermedad E que tenga


%todos los sintomas de la lista [X,Xs]
%------------------------------------------------------------buscar([],E,0).
buscar(X , E , 1) :- sintoma(X, E).

buscar([X|Xs] , E ,P) :- enfermedad(E) , buscar(X , E , S1) , buscar(Xs , E ,S2) , P is S1 + S2.


%-----------------------------------------------------------------%nos permite saber la cantidad K de sintomas para la enfermedad E
%-----------------------------------------------------------------totalSintoma(E , K) :- findall(X , sintoma(X, E) , L) , length(L , K) .
%-----------------------------------------------------------------%dado una lista de sintomas nos permite saber las posibles enfermedades
%con sus respectivos porcentajes.
%-----------------------------------------------------------------diagnostico([X|Xs] , E , K) :- buscar([X|Xs] , E , P) , totalSintoma(E , T) , K is P * 100 / T.

% -----------------------------------------------------------------% Paciente X tiene enfermedad E con un porcentaje C


%----------------------------------------------------------------tiene_enfermedad(X,E,C):-findall(Y,tiene_sintoma(X,Y),L),diagnostico(L , E , C).
% -----------------------------------------------------------------% la lista de pacientes L tiene enfermedad E
%----------------------------------------------------------------padece(L,E):-sintoma(S,E),findall(X,tiene_sintoma(X,S),L).
%----------------------------------%medicamento M alivia los sintomas S
%----------------------------------alivia_sintoma(M,S):-medicamento(M,E),sintoma(S,E).
%---------------------------------------------------------------%Cantidad C de medicamentos que pueden aliviar la enfermedad E
%---------------------------------------------------------------cant_medicamentos(E,C):- findall(M,medicamento(M,E),L), length(L,C).
%------------------------------------------------------------------%doctor_especialista(Y,X) = Y es el doctor especialista en enfermedad X.
%-------------------------------------------------------------------

doctor_especialista(Y,X) :- especialista_en(Y,Z),tratado_en(X,Z).
buscar_especialista(X,Y):-sintoma(X, E), doctor_especialista(Y,E).
buscar_especialista([X|Xs],Y ) :- buscar_especialista(X,Y) ; buscar_especialista(Xs,Y).
%------------------------------------------------------------------%paciente X puede atenderse con el medico Y
%------------------------------------------------------------------puede_atenderse(X,Y):- findall(S,tiene_sintoma(X,S),L),buscar_especialista(L,Y ).
%---------------------------------------------------------------%el medico P trata los sintomas S
%---------------------------------------------------------------trata_sintoma(P,S):-doctor_especialista(P,E),findall(Y,sintoma(Y,E),L),sinDuplicados(L,S).
%---------------------------------------------------------------%medico P receta medicamentos M
%---------------------------------------------------------------receta_medicamento(P,M):- doctor_especialista(P,E),medicamento(M,E).
%---------------------------------------------------------------%medico P trata cantidad de sntomas C
%---------------------------------------------------------------tratar_cant_sintoma(P,C):-doctor_especialista(P,E),totalSintoma(E,C).
%---------------------------------------------------------------%lista de platillos L con bueno para enfermedad E
%---------------------------------------------------------------alivia_mal1(P,E):- ingrediente(Z,P),hace_bien(Z,E).
alivia_mal(L,E):- enfermedad(E),findall(PL,alivia_mal1(PL,E),LL),sinDuplicados(LL,L).
%--------------------------------------------------------------------%enfermedad E puede encontrar platillo que le alivie en restaurante R
%--------------------------------------------------------------------%buscar_restaurante(P,R).
rest_plato([],[]).
rest_plato(K,X) :- buscar_restaurante(X,R).
rest_plato(K,[X|Xs]) :- rest_plato(K,X),rest_plato(K,Xs).

encontrar_platillo_bueno(E,K):- alivia_mal(L,E),rest_plato(K,L).
%---------------------------------------------------------------%platillo P es malo para enfermedad E
%---------------------------------------------------------------inadecuado_para_mal(P,E):- ingrediente(Z,P),hace_mal(Z,E).
%---------------------------------------------------------------%ingrediente X sirve para preparar platillo P
%---------------------------------------------------------------sirve_para_preparar([],P).
sirve_para_preparar(X,P):-ingrediente(X,P).
sirve_para_preparar([X,Xs],P):-sirve_para_preparar(X,P),sirve_para_preparar(Xs,P).

CONCLUSIONES:

Debido a que es un lenguaje muy expresivo para plantear algoritmos de lingstica


computacional, Prolog facilita la expresin de operaciones sobre los smbolos y
estructuras sin preocuparse de la representacin y manipulacin interna del
computador.
Los programas realizados en Prolog, en el presente documento, pueden ser
extendidos agregando nuevas clusulas (hechos, reglas).
Los sistemas expertos realizados en Prolog en el presente documento, simulan el
proceso de aprendizaje, de memorizacin, de razonamiento, de razonamiento y de
accin de un experto humano.

Software Utilizado

SWI-Prolog (Windows)

BIBLIOGRAFIA
Material de apoyo

http://euitio.trisquelmedia.net/apuntes/viejo/primero/logica/Programacion%2
0practica%20en%20prolog.zip
http://webepcc.unex.es/agomez/prolog.htm
Gregorio Fernndez: Representacin del conocimiento en sistemas inteligentes
(Apndice A)
Transparencias de lgica bsica

Manuales de referencia

Manual de Referencia de SWI-Prolog (pdf)


Manual de Referencia de SWI-Prolog (HTML comprimido)

También podría gustarte