建立文字區塊
《羅密歐與茱麗葉》的文本已載入到一個以幕(Act)與場(Scene)為結構的詞彙圖(lexical graph)中,但文字仍過大,無法產生有意義的嵌入向量(embedding)。請完成程式碼,將第一幕第一場的文本依每一行切成較小的區塊。
visualize_graph() 函式會顯示圖文件中的節點與關係。
本練習屬於課程
使用 LangChain 與 Neo4j 的 Graph RAG
練習說明
- 將每個
line_node附加到graph_document物件中。 - 在每個
scene與line_node之間建立HAS_LINE關係,並在line_node與character之間建立SPOKEN_BY關係,然後將它們加入graph_document。
動手互動練習
試著完成這個範例程式碼,體驗一下這個練習。
graph_document = GraphDocument(nodes=[scene], relationships=[])
characters = {}
for i, line in enumerate(lines[20:40]):
character, text = get_character_and_line(line)
line_node = Node(type="Line", id=f"{scene.id}-line-{i}", properties={"raw": line,"character": character, "text": text, "caption": f"{text[:15]}..."})
if character not in characters:
character_node = Node(type="Character", id=character, properties={"name": character})
characters[character] = character_node
graph_document.nodes.append(character_node)
# Add nodes to the array
graph_document.____.append(____)
# Add relationship to the array
graph_document.____.extend(
[Relationship(source=scene, target=line_node, type="____"),
Relationship(source=line_node, target=characters[character], type="SPOKEN_BY")]
)
visualize_graph(graph_document)