LukaBondi commited on
Commit
7e5f108
1 Parent(s): d96f2e8

Upload 8 files

Browse files
Files changed (8) hide show
  1. .gitattributes +35 -35
  2. README.md +12 -12
  3. app.py +95 -0
  4. corpus.py +0 -0
  5. feedback.db +0 -0
  6. inference_script.py +61 -0
  7. requirements.txt +7 -0
  8. viewdatabase.ipynb +70 -0
.gitattributes CHANGED
@@ -1,35 +1,35 @@
1
- *.7z filter=lfs diff=lfs merge=lfs -text
2
- *.arrow filter=lfs diff=lfs merge=lfs -text
3
- *.bin filter=lfs diff=lfs merge=lfs -text
4
- *.bz2 filter=lfs diff=lfs merge=lfs -text
5
- *.ckpt filter=lfs diff=lfs merge=lfs -text
6
- *.ftz filter=lfs diff=lfs merge=lfs -text
7
- *.gz filter=lfs diff=lfs merge=lfs -text
8
- *.h5 filter=lfs diff=lfs merge=lfs -text
9
- *.joblib filter=lfs diff=lfs merge=lfs -text
10
- *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
- *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
- *.model filter=lfs diff=lfs merge=lfs -text
13
- *.msgpack filter=lfs diff=lfs merge=lfs -text
14
- *.npy filter=lfs diff=lfs merge=lfs -text
15
- *.npz filter=lfs diff=lfs merge=lfs -text
16
- *.onnx filter=lfs diff=lfs merge=lfs -text
17
- *.ot filter=lfs diff=lfs merge=lfs -text
18
- *.parquet filter=lfs diff=lfs merge=lfs -text
19
- *.pb filter=lfs diff=lfs merge=lfs -text
20
- *.pickle filter=lfs diff=lfs merge=lfs -text
21
- *.pkl filter=lfs diff=lfs merge=lfs -text
22
- *.pt filter=lfs diff=lfs merge=lfs -text
23
- *.pth filter=lfs diff=lfs merge=lfs -text
24
- *.rar filter=lfs diff=lfs merge=lfs -text
25
- *.safetensors filter=lfs diff=lfs merge=lfs -text
26
- saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
- *.tar.* filter=lfs diff=lfs merge=lfs -text
28
- *.tar filter=lfs diff=lfs merge=lfs -text
29
- *.tflite filter=lfs diff=lfs merge=lfs -text
30
- *.tgz filter=lfs diff=lfs merge=lfs -text
31
- *.wasm filter=lfs diff=lfs merge=lfs -text
32
- *.xz filter=lfs diff=lfs merge=lfs -text
33
- *.zip filter=lfs diff=lfs merge=lfs -text
34
- *.zst filter=lfs diff=lfs merge=lfs -text
35
- *tfevents* filter=lfs diff=lfs merge=lfs -text
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tar filter=lfs diff=lfs merge=lfs -text
29
+ *.tflite filter=lfs diff=lfs merge=lfs -text
30
+ *.tgz filter=lfs diff=lfs merge=lfs -text
31
+ *.wasm filter=lfs diff=lfs merge=lfs -text
32
+ *.xz filter=lfs diff=lfs merge=lfs -text
33
+ *.zip filter=lfs diff=lfs merge=lfs -text
34
+ *.zst filter=lfs diff=lfs merge=lfs -text
35
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
README.md CHANGED
@@ -1,12 +1,12 @@
1
- ---
2
- title: Osuosutesttest
3
- emoji: 💻
4
- colorFrom: gray
5
- colorTo: pink
6
- sdk: streamlit
7
- sdk_version: 1.35.0
8
- app_file: app.py
9
- pinned: false
10
- ---
11
-
12
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
1
+ ---
2
+ title: AI Builder
3
+ emoji: 📈
4
+ colorFrom: blue
5
+ colorTo: gray
6
+ sdk: streamlit
7
+ sdk_version: 1.35.0
8
+ app_file: app.py
9
+ pinned: false
10
+ ---
11
+
12
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
app.py ADDED
@@ -0,0 +1,95 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #python -m streamlit run app.py
2
+
3
+ import streamlit as st
4
+ from transformers import pipeline
5
+ from FlagEmbedding import BGEM3FlagModel
6
+ from FlagEmbedding import FlagReranker
7
+ from inference_script import answer_question #import function from another file
8
+ from corpus import corpusvalue
9
+ import numpy as np
10
+ import getpass
11
+ import os
12
+ from langchain.prompts.prompt import PromptTemplate
13
+ from langchain.chains import ConversationChain
14
+ from langchain.chains import LLMChain
15
+ from langchain_google_genai import ChatGoogleGenerativeAI
16
+ import pickle
17
+ import sqlite3
18
+
19
+ @st.cache_resource
20
+ def load_model():
21
+ return BGEM3FlagModel('BAAI/bge-m3',use_fp16=True)
22
+
23
+ @st.cache_resource
24
+ def load_rerank_model():
25
+ return FlagReranker('BAAI/bge-reranker-v2-m3', use_fp16=True)
26
+
27
+ @st.cache_resource
28
+ def initLLM():
29
+ os.environ["GOOGLE_API_KEY"] = "AIzaSyAuKPswmbdM8jCpSt0luez7tjLND-uyY7M"
30
+ llm = ChatGoogleGenerativeAI(model="gemini-pro")
31
+ template = """
32
+ คุณเป็นผู้เชี่ยวชาญด้านกฎหมายจราจร มีหน้าที่ในการนำข้อความทางกฎหมายเเละข้อปฎิบัติเกี่ยวกับการละเมิดกฎจราจรเเละข้อปฎิบัติต่างๆมาตอบคำถามว่าคำถามที่ถามมานั้นว่าผิดหรือไม่หรือจะต้องปฎิบัติตัวอย่างไร เเละอธิบายเพิ่มเติม ให้รายละเอียดและคำอธิบายเพิ่มเติมเพื่อให้ผู้ที่ไม่ใช่ผู้เชี่ยวชาญด้านกฎหมายเข้าใจได้ง่ายขึ้น
33
+
34
+ นี้คือคำถาม : {question}
35
+ ข้อความทางกฎหมาย: {section}
36
+
37
+ คำอธิบายโดยละเอียด:
38
+ """
39
+ prompt = PromptTemplate(
40
+ input_variables=["section","question"],
41
+ template=template
42
+ )
43
+ llm_chain = LLMChain(prompt=prompt, llm=llm)
44
+ return llm_chain
45
+
46
+ @st.cache_data
47
+ def embeded_corpus():
48
+ file_path_embeded_corpus = "save/BGM3savesimilar_Corpus" #
49
+ with open(file_path_embeded_corpus,'rb') as file :
50
+ BGM3similar_Corpus = pickle.load(file)
51
+ return BGM3similar_Corpus
52
+
53
+ def insert_feedback(question, answer,like,dislike, feedback_text):
54
+ conn = sqlite3.connect('feedback.db')
55
+ cursor = conn.cursor()
56
+ cursor.execute('''CREATE TABLE IF NOT EXISTS qa_feedback
57
+ (id INTEGER PRIMARY KEY, question TEXT, answer TEXT,
58
+ like INTEGER, dislike INTEGER, feedback_text TEXT)''')
59
+ data_to_insert = (question, answer, like, dislike, feedback_text)
60
+ sql_query = 'INSERT INTO qa_feedback (question, answer, like, dislike, feedback_text) VALUES (?, ?, ?, ?, ?)'
61
+ cursor.execute(sql_query, data_to_insert)
62
+ conn.commit()
63
+ conn.close()
64
+
65
+ model = load_model()
66
+ rerank_model = load_rerank_model()
67
+ llm_chain = initLLM()
68
+ BGM3similar_Corpus = embeded_corpus()
69
+ corpus_list = corpusvalue()
70
+
71
+ st.title("Traffic Law Question-Answering")
72
+
73
+ question = st.text_area("Enter your question:")
74
+
75
+ if 'like_value' not in st.session_state:
76
+ st.session_state.like_value = 0
77
+ if 'dislike_value' not in st.session_state:
78
+ st.session_state.dislike_value = 0
79
+
80
+ if st.button("Get Answer"):
81
+ if question:
82
+ answer = answer_question(question=question,model=model,rerankmodel=rerank_model,corpus_embed= BGM3similar_Corpus, corpus_list=corpus_list,llm_chain=llm_chain)
83
+ st.text_area("Answer:", value=answer, height=500)
84
+
85
+ st.write("### Feedback")
86
+ feedback = st.text_area("Your feedback:")
87
+ like = st.button("👍 Like")
88
+ dislike = st.button("👎 Dislike")
89
+
90
+ like_value = 1 if like else 0
91
+ dislike_value = -1 if dislike else 0
92
+ feedback = feedback if feedback else "No Feed back"
93
+
94
+ if like or dislike or feedback:
95
+ insert_feedback(question, answer, like_value, dislike_value,feedback)
corpus.py ADDED
The diff for this file is too large to render. See raw diff
 
feedback.db ADDED
Binary file (36.9 kB). View file
 
inference_script.py ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import numpy as np
2
+
3
+ def answer_question(question , model , rerankmodel , corpus_embed , corpus_list,llm_chain):
4
+ # embeddings_1 = model.encode(question, batch_size=16, max_length=8192 ,)['dense_vecs']
5
+ # embeddings_2 = corpus_embed
6
+ # BGM3similarity = embeddings_1 @ embeddings_2.T
7
+
8
+ #==========================================================
9
+
10
+ ALL_final_ans_list_ALL = []
11
+ batch_size = 10
12
+
13
+ sentence_pairs = [[question, j] for j in corpus_list]
14
+
15
+ listofscore = []
16
+ compute_Score = range(0, len(sentence_pairs), batch_size)
17
+
18
+ for i in compute_Score:
19
+ batch_pairs = sentence_pairs[i:i+batch_size]
20
+ allscore = model.compute_score(batch_pairs,
21
+ max_passage_length=512,
22
+ weights_for_different_modes=[0.4, 0.2, 0.4]) # sum: w[0]*dense_score + w[1]*sparse_score + w[2]*colbert_score
23
+ listofscore.append(allscore)
24
+
25
+ score_ALL = []
26
+
27
+
28
+ for score_dict in listofscore:
29
+
30
+ score_ALL.extend(score_dict['colbert+sparse+dense'])
31
+
32
+ ALL_final_ans_list_ALL.append(score_ALL)
33
+
34
+ #==========================================================
35
+
36
+ topkindex = 15
37
+ topk15scoresimilar_BGM3 = np.argsort(ALL_final_ans_list_ALL)[:,-topkindex:]
38
+ # topk15scoresimilar_BGM3 = np.argsort(BGM3similarity)[-topkindex:]
39
+
40
+
41
+ BGM3_1_retrieval = [corpus_list[i] for i in topk15scoresimilar_BGM3[0]]
42
+
43
+ scores = []
44
+
45
+ for passage in BGM3_1_retrieval:
46
+ passage = str(passage)
47
+ score = rerankmodel.compute_score([question, passage], normalize=True)
48
+ scores.append(score)
49
+ # print(passage[:20])
50
+
51
+ highest_scoring_index = scores.index(max(scores))
52
+ result_passage = BGM3_1_retrieval[highest_scoring_index]
53
+ # print(f"Retrieval{result_passage[:20]}")
54
+ # print(f"Question{question}")
55
+
56
+ inputs = {"section": result_passage, "question": question}
57
+
58
+ response = llm_chain.run(inputs)
59
+ print(response)
60
+ return response
61
+
requirements.txt ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ numpy==1.26.4
2
+ transformers==4.38.2
3
+ streamlit==1.30.0
4
+ langchain
5
+ db-sqlite3
6
+ langchain_google_genai
7
+ FlagEmbedding
viewdatabase.ipynb ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "cells": [
3
+ {
4
+ "cell_type": "code",
5
+ "execution_count": 25,
6
+ "metadata": {},
7
+ "outputs": [
8
+ {
9
+ "name": "stdout",
10
+ "output_type": "stream",
11
+ "text": [
12
+ "(1, 'ขับรถไม่มีป้ายทะเบียน', '**คำถาม:** ขับรถไม่มีป้ายทะเบียน\\n\\n**ข้อความทางกฎหมาย:**\\nมาตรา 7 - ห้ามมิให้ผู้ใดนำรถที่มิได้ติดแผ่นป้ายเลขทะเบียน แผ่นป้ายเครื่องหมายเลขทะเบียนหรือป้ายประจำรถ ตามกฎหมายว่าด้วยรถยนต์ กฎหมายว่าด้วยการขนส่ง กฎหมายว่าด้วยล้อเลื่อน กฎหมายว่าด้วยรถลาก หรือกฎหมายว่าด้วยรถจ้าง มาใช้ในทางเดินรถ\\n\\n**คำอธิบายโดยละเอียด:**\\nขับรถโดยไม่มีป้ายทะเบียนเป็นการกระทำที่ผิดกฎหมาย เนื่องจากป้ายทะเบียนเป็นเครื่องหมายที่ใช้ระบุตัวตนของรถและเจ้าของรถ การนำรถที่ไม่มีป้ายทะเบียนมาใช้ในทางเดินรถถือเป็นความผิดตามกฎหมายว่าด้วยรถยนต์ มีโทษปรับไม่เกิน 2,000 บาท\\n\\n**ข้อปฏิบัติ:**\\nหากถูกเจ้าหน้าที่ตำรวจจับกุมในข้อหาขับรถไม่มีป้ายทะเบียน ผู้ขับขี่จะต้องชำระค่าปรับตามที่กำหนด และหากรถไม่มีป้ายทะเบียนถูกต้องตามกฎหมาย ผู้ขับขี่จะต้องนำรถไปติดแผ่นป้ายทะเบียนที่ถูกต้องก่อนนำมาใช้ในทางเดินรถ', 0, 0, 'No Feed back')\n",
13
+ "(2, 'ขับรถผ่าไฟสีส้ม', '**คำถาม:** ขับรถผ่าไฟสีส้ม\\n\\n**คำตอบ:** ผิด\\n\\n**ข้อความทางกฎหมาย:**\\nมาตรา 22 (1) สัญญาณจราจรไฟสีเหลืองอำพัน ให้ผู้ขับขี่เตรียมหยุดรถหลังเส้นให้รถหยุดเพื่อเตรียมปฏิบัติตามสัญญาณที่จะปรากฏต่อไปดังกล่าวใน (2)\\n\\n**คำอธิบายเพิ่มเติม:**\\nไฟจราจรสีเหลืองอำพันเป็นสัญญาณเตือนให้ผู้ขับขี่เตรียมหยุดรถ เมื่อเห็นไฟสีเหลืองอำพัน ผู้ขับขี่ต้องชะลอความเร็วและจอดรถหลังเส้นหยุดรถ หากผู้ขับขี่ได้เลยเส้นหยุดรถไปแล้ว จึงสามารถขับรถผ่านไปได้\\n\\nการขับรถผ่าไฟสีเหลืองอำพันถือว่าเป็นการฝ่าฝืนกฎหมายจราจร เนื่องจากผู้ขับขี่ไม่ได้ปฏิบัติตามสัญญาณจราจรอย่างถูกต้อง อาจทำให้เกิดอุบัติเหตุได้', 0, 0, 'No Feed back')\n",
14
+ "(3, 'ขับรถต้องชิดเลยฝั่งไหน?', '**ผิดหรือไม่:** ไม่ผิด\\n\\n**ข้อปฏิบัติ:**\\n\\nตามกฎหมายจราจร มาตรา 125 กำหนดให้ผู้ขับขี่รถยนต์ต้องขับรถชิดขอบทางด้านซ้ายในกรณีต่อไปนี้:\\n\\n* ขับรถผ่านทางแคบระหว่างภูเขาหรือระหว่างเนิน\\n* ขับรถในทางเดินรถบนภูเขาหรือบนเนิน\\n\\n**คำอธิบายเพิ่มเติม:**\\n\\n* **ทางแคบระหว่างภูเขาหรือระหว่างเนิน:** หมายถึงถนนที่มีความกว��างไม่เพียงพอให้รถยนต์สวนกันได้อย่างปลอดภัย\\n* **ทางเดินรถบนภูเขาหรือบนเนิน:** หมายถึงถนนที่ลาดชันและคดเคี้ยวบนภูเขาหรือเนินเขา\\n\\nเมื่อขับรถในสถานการณ์เหล่านี้ ผู้ขับขี่จะมองเห็นได้ชัดเจนขึ้นและสามารถตอบสนองต่อรถที่สวนมาได้อย่างรวดเร็ว การขับรถชิดซ้ายยังช่วยลดความเสี่ยงที่จะเกิดการชนกับสิ่งกีดขวางข้างทางอีกด้วย\\n\\nนอกจากนี้ เมื่อถึงทางโค้ง ผู้ขับขี่ต้องใช้เสียงสัญญาณเพื่อเตือนรถอื่นที่อาจสวนมา เพื่อความปลอดภัยในขณะขับรถบนภูเขาหรือเนินเขา', 0, 0, 'No Feed back')\n",
15
+ "(4, 'ขับรถในเวลากลางคืนต้องเปิดไฟหน้าไหม ?', '**คำถาม:** ขับรถในเวลากลางคืนต้องเปิดไฟหน้าไหม?\\n\\n**คำตอบ:** ใช่ ต้องเปิดไฟหน้า\\n\\n**ข้อความทางกฎหมายที่เกี่ยวข้อง:**\\nไม่มีข้อความทางกฎหมายโดยตรงที่ระบุว่าต้องเปิดไฟหน้าในเวลากลางคืน แต่มีข้อความที่เกี่ยวข้องใน\\n\\n* **มาตรา 15 แห่งพระราชบัญญัติจราจรทางบก พ.ศ. 2522** ที่ระบุว่า ในเวลาที่ต้องเปิดไฟตามมาตรา 11 หรือมาตรา 61 ผู้ขับขี่ต้องจุดไฟสัญญาณแสงแดง หรือในเวลากลางวันต้องติดธงสีแดงไว้ที่ตอนปลายสุดของสิ่งที่บรรทุกนั้น โดยจุดไฟสัญญาณหรือติดธงไว้ให้มองเห็นได้ในระยะไม่น้อยกว่าหนึ่งร้อยห้าสิบเมตร\\n\\n* **มาตรา 11 แห่งพระราชบัญญัติจราจรทางบก พ.ศ. 2522** ที่ระบุว่า รถทุกคันที่มีความกว้างเกินกว่า 2.50 เมตร หรือยาวเกินกว่า 6.00 เมตร ต้องติดไฟหน้า ไฟท้าย และไฟเบรกในเวลากลางคืน\\n\\n**ข้อปฏิบัติ:**\\nจากข้อความทางกฎหมายข้างต้น แม้จะไม่มีข้อความที่ระบุโดยตรงว่าต้องเปิดไฟหน้าในเวลากลางคืน แต่เนื่องจากไฟหน้าเป็นอุปกรณ์ที่จำเป็นสำหรับการมองเห็นในเวลากลางคืน เพื่อความปลอดภัยของผู้ขับขี่และผู้ใช้ถนนอื่นๆ จึงควรเปิดไฟหน้าในเวลากลางคืนเสมอ\\n\\n**การละเมิดและโทษ:**\\nการขับรถในเวลากลางคืนโดยไม่เปิดไฟหน้า ถือเป็นการฝ่าฝืนกฎจราจรและอาจถูกปรับตามกฎหมาย', 0, 0, 'No Feed back')\n",
16
+ "(5, 'ขับรถตอนกลางคืนต้องเปิดไฟหน้าไหม ?', '**คำถาม:** ขับรถตอนกลางคืนต้องเปิดไฟหน้าไหม?\\n\\n**คำตอบ:** ใช่\\n\\n**ข้อความทางกฎหมาย:** มาตรา 61 พระราชบัญญัติจราจรทางบก พ.ศ. 2522\\n\\n**ข้อปฏิบัติ:**\\n\\n* ผู้ขับขี่รถยนต์ทุกชนิดต้องเปิดไฟหน้ารถในระหว่างเวลาตั้งแต่พระอาทิตย์ตกถึงพระอาทิตย์ขึ้น\\n\\n**คำอธิบายเ���ิ่มเติม:**\\n\\nกฎหมายจราจรกำหนดให้ผู้ขับขี่รถยนต์ต้องเปิดไฟหน้ารถในเวลากลางคืนเพื่อเพิ่มทัศนวิสัยให้ทั้งผู้ขับขี่และผู้ใช้ถนนคนอื่นๆ ไฟหน้าช่วยให้ผู้ขับขี่มองเห็นสิ่งกีดขวางและอันตรายอื่นๆ บนท้องถนนได้ชัดเจนขึ้น นอกจากนี้ ยังช่วยให้ผู้ใช้ถนนคนอื่นๆ มองเห็นรถที่กำลังขับขี่อยู่ได้ง่ายขึ้น ซึ่งจะช่วยลดความเสี่ยงต่อการเกิดอุบัติเหตุ\\n\\nการละเมิดกฎหมายนี้ถือเป็นความผิดทางอาญาและอาจส่งผลให้ถูกปรับหรือจำคุกได้', 0, 0, 'No Feed back')\n",
17
+ "(6, 'ขับรถไม่มีป้ายทะเบียนผิดไหม?', '**ผิด**\\n\\n**ข้อความทางกฎหมาย:** มาตรา 7 แห่ง พระราชบัญญัติรถยนต์ พ.ศ. 2522\\n\\n**คำอธิบายโดยละเอียด:**\\n\\nตามกฎหมายไทย ห้ามมิให้ผู้ใดนำรถที่ไม่ได้ติดแผ่นป้ายทะเบียนมาใช้ในทางเดินรถ การขับขี่รถยนต์ที่ไม่มีป้ายทะเบียนถือเป็นการฝ่าฝืนกฎหมายจราจร ซึ่งอาจนำไปสู่การถูกปรับและดำเนินคดี\\n\\n**เหตุผลที่ต้องติดป้ายทะเบียน:**\\n\\n* เพื่อระบุตัวตนของรถยนต์และเจ้าของรถ\\n* เพื่ออำนวยความสะดวกในการบังคับใช้กฎหมายจราจร\\n* เพื่อช่วยในการติดตามรถยนต์ที่สูญหายหรือถูกขโมย', 0, 0, 'No Feed back')\n",
18
+ "(7, 'ขับรถไม่มีป้ายทะเบียนผิดไหม?', '**คำถาม:** ขับรถไม่มีป้ายทะเบียนผิดไหม?\\n\\n**คำตอบ:** ผิด\\n\\n**ข้อความทางกฎหมาย:**\\nมาตรา 7 แห่งพระราชบัญญัติรถยนต์ พ.ศ. 2522 ห้ามมิให้ผู้ใดนำรถที่มิได้ติดแผ่นป้ายเลขทะเบียน แผ่นป้ายเครื่องหมายเลขทะเบียน หรือป้ายประจำรถ มาใช้ในทางเดินรถ\\n\\n**ข้อปฏิบัติ:**\\nผู้ขับขี่รถยนต์ทุกคันต้องติดป้ายทะเบียนที่ได้รับอนุญาตจากกรมการขนส่งทางบกไว้ที่ด้านหน้าและด้านหลังของรถ โดยต้องติดให้ชัดเจนและมองเห็นได้ง่าย\\n\\n**คำอธิบายเพิ่มเติม:**\\n- ป้ายทะเบียนเป็นเครื่องหมายสำคัญที่ใช้ในการระบุตัวตนและเจ้าของรถ\\n- การขับรถโดยไม่มีป้ายทะเบียนถือเป็นการผิดกฎหมาย เนื่องจากเจ้าหน้าที่ไม่สามารถระบุตัวตนของผู้ขับขี่หรือเจ้าของรถได้\\n- หากฝ่าฝืนกฎหมายนี้ ผู้ขับขี่อาจถูกปรับไม่เกิน 2,000 บาท และอาจถูกสั่งให้หยุดใช้รถได้', 0, 0, 'No Feed back')\n"
19
+ ]
20
+ }
21
+ ],
22
+ "source": [
23
+ "import sqlite3\n",
24
+ "\n",
25
+ "# Connect to the SQLite database\n",
26
+ "conn = sqlite3.connect('feedback.db')\n",
27
+ "\n",
28
+ "# Create a cursor object to execute SQL queries\n",
29
+ "cursor = conn.cursor()\n",
30
+ "\n",
31
+ "# Define the SQL query to select all data from the users table\n",
32
+ "sql_query = 'SELECT * FROM qa_feedback'\n",
33
+ "\n",
34
+ "# Execute the SQL query\n",
35
+ "cursor.execute(sql_query)\n",
36
+ "\n",
37
+ "# Fetch all the rows from the result\n",
38
+ "rows = cursor.fetchall()\n",
39
+ "\n",
40
+ "# Print the rows\n",
41
+ "for row in rows:\n",
42
+ " print(row)\n",
43
+ "\n",
44
+ "# Close the database connection\n",
45
+ "conn.close()\n"
46
+ ]
47
+ }
48
+ ],
49
+ "metadata": {
50
+ "kernelspec": {
51
+ "display_name": "base",
52
+ "language": "python",
53
+ "name": "python3"
54
+ },
55
+ "language_info": {
56
+ "codemirror_mode": {
57
+ "name": "ipython",
58
+ "version": 3
59
+ },
60
+ "file_extension": ".py",
61
+ "mimetype": "text/x-python",
62
+ "name": "python",
63
+ "nbconvert_exporter": "python",
64
+ "pygments_lexer": "ipython3",
65
+ "version": "3.11.7"
66
+ }
67
+ },
68
+ "nbformat": 4,
69
+ "nbformat_minor": 2
70
+ }