It seems like your problem is some form of FAQ matching. The user asks a question, the NLU part matches this question to a relevant answer located in your files.
For the training aspect, you could do two things:
You could simply use a string matching distance like Levenshtein between your input and the different outputs, and return the output that is the closest. This way you do not need to train your model per se. Since this is a form of a K-Nearest Neighbour with one neighbour, the learning happens during the inference. The advantage of this is that if your files change, or you have more answers, you won't have to change anything.
This is what you mean by self-learning.
This blog explains how to use fuzzywuzzy (a Python package to compute such distances): https://marcobonzanini.com/2015/02/25/fuzzy-string-matching-in-python/
Obviously, simple distance measures might not scale well or might simply not perform great. Your other option is to treat this as a classification problem. Your classes are your different answers from your file, and your inputs are the user inputs. This will require the user input to be labelled.
This is what you refer to as manual training.
Question answering
Everything that was mentioned above was assuming that you have a known list of possible answers. If what you want is to have your bot "query" your text files and figure out the answer on its own, it will be much more complicated task. Question answering from open text is a complicated field of research. Just think of Google. It is able to sometimes answer simple questions like "Who?", "What time?" etc. but it's not very good yet at giving concise answers to complex queries.